EventEmitter.call()是做什么的?
我看到了这个代码示例:
function Dog(name) { this.name = name; EventEmitter.call(this); }
它从EventEmitterinheritance,但call()方法实际上做了什么?
基本上, Dog
应该是一个属性name
的构造函数。 EventEmitter.call(this)
在Dog
实例创build时执行时,将从EventEmitter
构造函数声明的属性附加到Dog
。
记住:构造函数仍然是函数,仍然可以作为函数使用。
//An example EventEmitter function EventEmitter(){ //for example, if EventEmitter had these properties //when EventEmitter.call(this) is executed in the Dog constructor //it basically passes the new instance of Dog into this function as "this" //where here, it appends properties to it this.foo = 'foo'; this.bar = 'bar'; } //And your constructor Dog function Dog(name) { this.name = name; //during instance creation, this line calls the EventEmitter function //and passes "this" from this scope, which is your new instance of Dog //as "this" in the EventEmitter constructor EventEmitter.call(this); } //create Dog var newDog = new Dog('furball'); //the name, from the Dog constructor newDog.name; //furball //foo and bar, which were appended to the instance by calling EventEmitter.call(this) newDog.foo; //foo newDoc.bar; //bar
EventEmitter.call(this);
这一行大致相当于在具有经典inheritance的语言中调用super()。