Object.create和继承

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

Ray*_*nos 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
Run Code Online (Sandbox Code Playgroud)

唯一的区别是,不仅是tempEventEmitter它继承的对象还具有从调用扩充的自己的属性EventEmitter.constructor.call(temp).

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

就个人而言,我从未继承过EventEmitter,我把它混合在里面