супер ключевое слово 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.
  • имя метода не становится привязкой в области метода (в отличие от именованных выражений функций).