gpt4 book ai didi

ecmascript-6 - super 关键字出乎意料

转载 作者:行者123 更新时间:2023-12-04 00:30:16 24 4
gpt4 key购买 nike

根据 ES6 简写初始化器,以下两种方法是相同的:

在 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() {}是“普通”属性/函数,而不是方法,因为它不遵循方法语法。

方法和普通函数定义之间的区别是:
  • 方法有一个“HomeObject”,它允许它们使用 super .
  • 方法是不可构造的,即它们不能用 new 调用.
  • 方法的名称不会成为方法范围内的绑定(bind)(与命名函数表达式不同)。
  • 关于ecmascript-6 - super 关键字出乎意料,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39263358/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com