1

以下示例中生成的对象之间有什么区别:

var EventEmitter = require('events').EventEmitter;

var oProto  = Object.create(EventEmitter.prototype);
var oProto2 = Object.create(oProto);

var oConstr  = Object.create(new EventEmitter);
var oConstr2 = Object.create(oConstr);

我想oConstr并且oConstr2将在EventEmitter构造函数中设置任何属性,但是还有其他有意义的区别吗?

4

1 回答 1

5

您的代码具有误导性。oConstr当它不是构造函数时,您使用该术语。

oProto -> EventEmitter.prototype -> Object.prototype -> null
oProto2 -> oProto -> EventEmitter.prototype -> Object.prototype -> null

var temp = new EventEmitter;

oConstr -> temp -> EventEmitter.prototype -> Object.prototype -> null
oConstr2 -> oConstr -> etc

唯一的区别是,temp不仅从它继承的对象EventEmitter还具有从对EventEmitter.constructor.call(temp).

我个人建议您使用EventEmitter.prototype并忽略new EventEmitter

就我个人而言,我从来没有继承自EventEmitter我将它混合在一起

于 2011-11-29T02:24:50.033 回答