gpt4 book ai didi

javascript - 如何在 ES6 中无需使用 super 来扩展类?

转载 作者:IT王子 更新时间:2023-10-29 02:45:53 26 4
gpt4 key购买 nike

是否可以在 ES6 中扩展一个类而不调用 super 方法来调用父类?

编辑:这个问题可能具有误导性。这是我们必须调用 super() 的标准还是我错过了什么?

例如:

class Character {
constructor(){
console.log('invoke character');
}
}

class Hero extends Character{
constructor(){
super(); // exception thrown here when not called
console.log('invoke hero');
}
}

var hero = new Hero();

当我不在派生类上调用 super() 时,我遇到了范围问题 -> this is not defined

我在 v2.3.0 中使用 iojs --harmony 运行它

最佳答案

ES2015(ES6)类的规则基本上归结为:

  1. 在子类构造函数中,this 在调用 super 之前不能使用。
  2. 如果它们是子类,ES6 类构造函数必须调用 super,否则它们必须显式返回某个对象来代替未初始化的对象。

这归结为 ES2015 规范的两个重要部分。

部分 8.1.1.3.4定义逻辑来决定函数中的 this 是什么。类的重要部分是 this 可能处于 "uninitialized" 状态,并且当处于这种状态时,尝试使用 this 会抛出异常。

部分 9.2.2 , [[Construct]],它定义了通过 newsuper 调用的函数的行为。调用基类构造函数时,this[[Construct]] 的第 8 步初始化,但对于所有其他情况,this 是未初始化。在构造结束时,调用 GetThisBinding,因此如果还没有调用 super(因此初始化 this),或者显式替换对象没有返回,构造函数调用的最后一行会抛出异常。

关于javascript - 如何在 ES6 中无需使用 super 来扩展类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31067368/

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