以下代码失败:
var EventEmitter = require('events');
class Foo extends EventEmitter{
constructor(){
this.name = 'foo';
}
print(){
this.name = 'hello';
console.log('world');
}
}
var f = new Foo();
console.log(f.print());
并打印错误
this.name = 'foo';
^
ReferenceError: this is not defined
然而,当我没有扩展EventEmitter时,它工作正常。
为什么会发生这种情况,我该如何解决? 运行nodejs 4.2.1
答案 0 :(得分:18)
当您扩展其他功能时,super(..)
应该是constructor
中的第一个表达式。只有这样,您才能使用this
。
var EventEmitter = require('events');
class Foo extends EventEmitter {
constructor() {
super();
this.name = 'foo';
}
print() {
console.log(this.name);
}
}
new Foo().print();
// foo
就像这样,因为你所派生的类应该有机会在当前类覆盖它们之前设置变量。
此外,隐式调用super()
意味着,我们将undefined
传递给在父项的constructor
中声明的参数。这就是默认情况下没有完成的原因。