根据ES6速记初始化,以下两种方法相同:
var person = {
name: "Person",
greet: function() {
return "Hello " + this.name;
}
};
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 person中声明方法greet的方式,它应该是相同的。那么,为什么我们会收到错误?
答案 0 :(得分:21)
那么,为什么我们会收到错误?
因为super
仅在methods内有效。 greet: function() {}
是"正常"属性/函数,而不是方法,因为它不遵循方法语法。
方法和正常函数定义之间的区别是:
super
。new
调用它们。