2014-04-01 74 views
0

在这个模式:如何util.inherits影响原型链?

Function ConstrA() { 
    EventEmitter.call(this); 
} 
util.inherits(ConstrA, EventEmitter); 

var obj = new ConstrA(); 

ConstrA和OBJ将有自己的原型链不调用util.inherits。

util.inherits是否创建第二个原型链或将当前的一个替换为ConstrA,还是仅将EventEmitter原型链的属性(包括自己的和继承的)添加到ConstrA的原型中?

回答

2

util.inherits覆盖构造函数的原型对象,其原型设为您是从继承构造函数的原型。

如果您想从另一个对象继承原型,然后将其他方法添加到您的自定义构造函数的原型中,则需要确保在定义构造函数之前调用util.inherits,然后再定义其他任何原型方法。

为util.inherits Node.js的来源是令人惊讶的简单。看看你自己!

https://github.com/joyent/node/blob/490d5ab7808aedb998d1f4f933bf3de748758f62/lib/util.js#L631

然后你可以阅读MDN文档进行的Object.create在剩余的填补空白的了解。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

+0

+1的代码链接:-) – Bergi

+0

当你说“与对象”,在你的第一句话,你的意思是一个空对象(其中只有一台样机)或其他一些物体与它的自己的属性? – esnm

+1

与它的原型设置为你继承构造函数的原型对象实例。它将拥有的唯一属性是“构造函数”,并将其值设置为您的自定义构造函数 –