我想知道为什么在节点中创建新的stream
类时,我需要同时使用call
和util.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
是不必要的。
答案 0 :(得分:4)
util.inherits
会将原型从Readable
合并到MyStream
。这种原型合并和构造函数调用都需要更完整的继承感。
构造函数调用Readable.call( ... )
将只运行Readable
的构造函数,可能初始化一些变量并可能进行一些初始设置。
原型合并util.inherits(MyStream, Readable);
将采用Readable
上的原型方法,并将其粘贴到MyStream
的任何未来实例上。
因此,如果没有构造函数调用,您就不会进行初始设置,如果没有原型合并,您将无法获得这些方法。从中可以看出为什么两个步骤都需要它。