为什么在Node.js中使用util.inherits和.call进行继承

时间:2015-01-08 03:42:03

标签: javascript node.js inheritance

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

例如,在以下用于创建可读流的代码中,我必须使用两者:

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.call正在从Readable调用构造函数,因此util.inherits是不必要的。

1 个答案:

答案 0 :(得分:4)

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

构造函数调用Readable.call( ... )将只运行Readable的构造函数,可能初始化一些变量并可能进行一些初始设置。

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

因此,如果没有构造函数调用,您就不会进行初始设置,如果没有原型合​​并,您将无法获得这些方法。从中可以看出为什么两个步骤都需要它。