我有一些代码:
"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类?
答案 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”解决问题。