Javascript Object.create和继承

Javascript Object.create和继承,javascript,node.js,inheritance,ecmascript-5,object-create,Javascript,Node.js,Inheritance,Ecmascript 5,Object Create,以下示例中的结果对象之间有什么区别: 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);

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

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
构造函数中设置任何属性,但是还有其他有意义的区别吗?

您的代码具有误导性。如果不是构造函数,则使用术语
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
并忽略
neweventemitter


就我个人而言,我从来没有继承过
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
不仅仅是从
EventEmitter
继承的对象,它还具有从调用
EventEmitter.constructor.call(temp)
扩展的属性

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

就我个人而言,我从未继承过
EventEmitter