为什么在Node.js中使用util.inherits和.call来inheritance

我想知道为什么,当在节点中创build一个新的stream类时,我需要同时使用callutil.inherits

例如,在以下用于创build可读stream的代码中,我必须使用以下两个:

 var Readable = require('stream').Readable; var util = require('util'); var MyStream = function (options) { Readable.call(this, options) } util.inherits(MyStream, Readable); //Hasn't this already inherited all methods from Readable via "call" var stream = new MyStream(); 

这似乎是Readable.callReadable调用构造函数,因此util.inherits是不必要的。

util.inherits会将Readable的原型合并到MyStream 。 这个原型合并和构造函数调用都需要更完整的inheritance。

构造函数调用Readable.call( ... )将只是通过Readable的构造函数运行,可能初始化一些variables,也许做一些初始设置。

原型合并util.inherits(MyStream, Readable); 将采用Readable的原型方法,并将其粘贴到任何未来的MyStream实例上。

所以没有构造函数调用,你不会得到最初的设置,没有原型合​​并,你没有得到的方法。 从中你可以看到为什么这两个步骤都需要。