超级关键字在这里意外
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
. 调用它们
- 方法的名称不会成为方法范围内的绑定(与命名函数表达式不同)。
检查构造函数的拼写
这个错误也会出现,如果你有拼写错误。
根据 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
. 调用它们
- 方法的名称不会成为方法范围内的绑定(与命名函数表达式不同)。
检查构造函数的拼写 这个错误也会出现,如果你有拼写错误。