Object.create和inheritance

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

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); 

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

你的代码是误导性的。 当它不是构造函数时,使用术语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不仅仅是一个从EventEmitterinheritance的对象,它还拥有自EventEmitter.constructor.call(temp)调用中增加的属性。

我个人build议你使用EventEmitter.prototype并忽略new EventEmitter

我个人从来没有从EventEmitterinheritance, 我把它混入