Объект.создание и наследование - PullRequest
1 голос
/ 29 ноября 2011

В чем разница между результирующими объектами в следующих примерах:

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

Полагаю, oConstr и oConstr2 будут иметь какие-либо свойства, установленные в конструкторе EventEmitter, но есть ли какое-либо иное значимое отличие?

1 Ответ

5 голосов
/ 29 ноября 2011

Ваш код вводит в заблуждение. Вы используете термин 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

Единственное отличие состоит в том, что temp - это не просто объект, который наследуется от EventEmitter, он также имеет собственные свойства, дополненные вызовом EventEmitter.constructor.call(temp).

Я бы лично порекомендовал вам использовать EventEmitter.prototype и игнорировать new EventEmitter

Лично я никогда не наследую от EventEmitter, Я смешиваю это в

...