Оказывается, объявление
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], которые указывают, что функция является методом?