扩展EventEmitter时如何解决这个问题没有定义?
以下代码失败:
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
在扩展另一个函数时, super(..)
应该是constructor
的第一个expression式。 只有这样你才能使用this
。
var EventEmitter = require('events'); class Foo extends EventEmitter { constructor() { super(); this.name = 'foo'; } print() { console.log(this.name); } } new Foo().print(); // foo
就是这样,因为你从这个类派生出来的类应该有机会在当前类重写它们之前设置variables。
另外,隐式地调用super()
意味着,我们将undefined
的parameter passing给在父类的constructor
中声明的参数。 这就是为什么它没有完成,默认情况下。