супер ключевое слово unexpected здесь
согласно инициализатору стенографии ES6, следующие 2 метода одинаковы:
в ES5
var person = {
name: "Person",
greet: function() {
return "Hello " + this.name;
}
};
в ES6
var person = {
name: "Person",
greet() {
return "Hello " + this.name;
}
};
есть ли способ ES6 в любом случае отличается от предыдущего способа? Если нет, то использование "супер" внутри них также должно рассматриваться как равное, что не соответствует действительности, см. Ниже два варианта:
под строительство
let person = {
greet(){
super.greet();
}
};
Object.setPrototypeOf(person, {
greet: function(){ console.log("Prototype method"); }
});
person.greet();
не ниже
let person = {
greet: function(){
super.greet(); // Throw error: Uncaught SyntaxError: 'super' keyword unexpected here
}
};
Object.setPrototypeOf(person, {
greet: function(){ console.log("Prototype method"); }
});
person.greet();
единственная разница в выше 2 примерами является способ объявления метода greet in person object, который должен быть одинаковым. Итак, почему мы получаем ошибку?
1 ответов
Итак, почему мы получаем ошибку?
, потому что super
действует только внутри методы. greet: function() {}
является "нормальным" свойством / функцией, а не методом, потому что он не следует синтаксису метода.
различия между методом и обычным определением функции:
- методы имеют "HomeObject", который позволяет им использовать
super
. - методы не являются конструктивными, т. е. они не могут быть вызваны с
new
. - имя метода не становится привязкой в области метода (в отличие от именованных выражений функций).