Object.create and inheritance

348 Views Asked by At

What is the difference between the resulting objects in the following examples:

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

I suppose oConstr and oConstr2 will have any properties set in the EventEmitter constructor, but is there any other meaningful difference?

1

There are 1 best solutions below

0
On BEST ANSWER

Your code is misleading. you use the term oConstr when it's not a constructor function.

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

The only difference is that temp is not just an object that inherits from EventEmitter it also has own properties augmented from the call to EventEmitter.constructor.call(temp).

I'd personally recommend you use EventEmitter.prototype and ignore new EventEmitter

Personally I don't ever inherit from EventEmitter, I mix it in