Задать вопрос

Как определить метод, а не свойство-функцию?

Оказывается, объявление
let myobj = {
   mymethod(...) {...} // метод
}
не то же самое, что
let myobj = {
   mymethod: function(...) {...}  // свойство-функция
}

Если написать так, то все работает
let animal = {
    eat(food) {
        console.log('eats ' + food);
    }
}

let rabbit = {
    __proto__: animal,
    eat() {
        super.eat('carrot');
    } 
}

rabbit.eat(); // eats carrot

Но если написать так, то получается ошибка SyntaxError: 'super' keyword unexpected here
let animal = {
    eat(food) {
        console.log('eats ' + food);
    }
}

let rabbit = {
    __proto__: animal,
    eat: function() {
        super.eat('carrot'); // SyntaxError: 'super' keyword unexpected here
    } 
}

rabbit.eat();

И так тоже ошибка
let animal = {
    eat(food) {
        console.log('eats ' + food);
    }
}

let rabbit = {
    __proto__: animal
}

Object.defineProperties(rabbit, {
    eat: {
        value: function() {
            super.eat('carrot'); // SyntaxError: 'super' keyword unexpected here
        }
    }
});

rabbit.eat();

Можно как-то добавить метод вне объекта, после определения объекта?

Как во внутреннем представлении определяется, что функция является методом?

Как узнать программно, функция myobj.mymethod была определена как метод или как свойство-функция?

Быть может, есть какие-то скрытые флаги, например obj[Symbol.isMethod], которые указывают, что функция является методом?
  • Вопрос задан
  • 192 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
MDN: Using super in method definitions:
Only functions defined as methods have access to the super keyword. super.prop looks up the property on the prototype of the object that the method was initialized on.


Learn.Javascript: Методы, а не свойства-функции
Свойство [[HomeObject]] определено для методов как классов, так и обычных объектов. Но для объектов методы должны быть объявлены именно как method(), а не "method: function()".

Для нас различий нет, но они есть для JavaScript.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы