"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" 解析问题。
我有一些代码:
"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" 解析问题。