Search code examples
javascriptnode.jsinheritanceecmascript-5object-create

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?


Solution

  • 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