超级关键字在这里意外

super keyword unexpected here

根据 ES6 shorthand 初始化器,以下 2 个方法是相同的:

在 ES5 中

var person = {
  name: "Person",
  greet: function() {
     return "Hello " + this.name;
  }
};

在 ES6 中

var person = {
  name: "Person",
  greet() {
     return "Hello " + this.name;
  }
};

ES6 的方式和以前的方式有什么不同吗?如果不是那么在它们里面使用 "super" 也应该被视为相等,这不成立,请看下面两个变体:

以下作品

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();

上面两个例子唯一的区别就是我们在person对象中声明方法greet的方式,应该是一样的。那么,为什么我们会出错?

So, why do we get error?

因为super只在methods内有效。 greet: function() {} 是一个 "normal" property/function,不是方法,因为它不遵循方法语法。

方法和普通函数定义的区别是:

  • 方法有一个 "HomeObject" 允许它们使用 super.
  • 方法不可构造,即不能用 new.
  • 调用它们
  • 方法的名称不会成为方法范围内的绑定(与命名函数表达式不同)。

检查构造函数的拼写 这个错误也会出现,如果你有拼写错误。