"ReferenceError: this is not defined" in subclass

"ReferenceError: this is not defined" in subclass

我有一些代码:

"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 的右括号。

为什么我不能扩展节点 class?

您需要调用 super 构造函数:

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

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

Uncaught SyntaxError: unknown: Line 10: Derived constructor must call super()

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

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

"use strict";

class Node {
  constructor() {

  }
}

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

const fred = new Person();

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

错误信息不是很明确,当然,但我猜它是由继承的内部实现引起的。由于您不调用父 class 的构造函数,因此在实例化 fred 对象时,对 "this" 的一些内部使用必然会导致 "this" 解析问题。