Jacob Rask
Jacob Rask

Reputation: 24368

Object.create and inheritance

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?

Upvotes: 1

Views: 334

Answers (1)

Raynos
Raynos

Reputation: 169373

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

Upvotes: 5

Related Questions