Jac*_*ask 1 javascript inheritance node.js 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);
Run Code Online (Sandbox Code Playgroud)
我想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
Run Code Online (Sandbox Code Playgroud)
唯一的区别是,不仅是temp
从EventEmitter
它继承的对象还具有从调用扩充的自己的属性EventEmitter.constructor.call(temp)
.
我个人建议你使用EventEmitter.prototype
并忽略new EventEmitter
就个人而言,我从未继承过EventEmitter
,我把它混合在里面