子类中的“ReferenceError:this not defined”

时间:2016-01-25 16:08:20

标签: javascript node.js ecmascript-6 extends

我有一些代码:

"use strict";

class Node {
  constructor() {

  }
}

class Person extends Node {
  constructor() {

  }
}

const fred = new Person();

在Node v4.2.4中运行它会出错:

ReferenceError: this is not defined
    at Person (/home/chris/test.js:12:3)

第12行是Person :: constructor的结束括号。

为什么我不能扩展Node类?

2 个答案:

答案 0 :(得分:6)

您需要调用super构造函数:

class Person extends Node {
  constructor() {
    super();
  }
}

作为参考,我实际上在es6fiddle上测试了您的代码,这在控制台中给出了非常好的描述性错误消息。

  

Uncaught SyntaxError:unknown:第10行:派生构造函数必须调用super()

   8 | 
   9 | class Person extends Node {
> 10 |   constructor() {
     |   ^
  11 | 
  12 |   }
  13 | }

答案 1 :(得分:3)

在Person类的构造函数中,需要调用super():

"use strict";

class Node {
  constructor() {

  }
}

class Person extends Node {
  constructor() {
    super();
  }
}

const fred = new Person();

这是强制性的,如Mozilla's documentation for super中所述。

错误消息并非真正明确,被授予,但我想这是由继承的内部实现引起的。由于您没有调用父类的构造函数,因此当您实例化fred对象时,“this”的某些内部用法必然会导致“this”解决问题。