当前位置: 首页 > 面试题库 >

如何扩展类而不必在ES6中使用super?

蒙洛华
2023-03-14
问题内容

是否可以在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在的步骤#8进行了初始化[[Construct]],但对于所有其他情况,this都未初始化。在构造结束时,GetThisBinding将调用,因此,如果super尚未调用(因此初始化this),或者未返回显式替换对象,则构造函数调用的最后一行将引发异常。



 类似资料:
  • 是否可以在ES6中扩展类而不调用方法来调用父类? 编辑:这个问题可能有误导性。这是我们必须调用的标准,还是我遗漏了什么? 例如: 当我不对派生类调用时,我遇到了一个作用域问题- 我用iojs在v2.3.0中运行这个

  • 这是我现在面临的问题。我有一个类,假设 ,这个类定义了一个名为 的方法,该方法返回一个 实例。类 在 内部定义,并被声明为。我想做的是定义一个扩展的类,但我也我自己的功能(方法,属性等)来扩展。我也希望返回。 问题是< code>Bar是最终的。下面是我想做的一个例子: 我想做的是: 我怎样才能做到这一点? [编辑]我正在为我的问题添加更多详细信息。我实际上正在为 Jenkins 开发一个插件,搜

  • 问题内容: 我想在Firefox扩展中使用jQuery,我将库导入到xul文件中,如下所示: 但是xul文件中无法识别$()函数,jQuery()也无法识别。 我还尝试过将“ content.document”对象(该对象反映“ document”对象)作为上下文参数传递给jQuery函数,如下所示: 但仍然无法正常工作,以前有人遇到过这个问题吗? 问题答案: 我使用以下内容: 这是一个

  • 我正在尝试做的是创建一个chrome扩展,创建新的,嵌套的,书签文件夹,使用承诺。 执行此操作的函数是chrome.bookmarks.create()。但是我不能只循环这个函数,因为chrome.bookmarks.create是异步的。我需要等待,直到文件夹创建,并获得它的新ID,然后继续它的子级。 承诺似乎是要走的路。不幸的是,我找不到一个使用异步调用和自己的回调(如chrome.bookm

  • 我在React中测试ES6语法,并编写如下组件:

  • 我已经创建了一个数据类 如何正确重写/扩展自定义DataClass的toString方法?