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