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