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

Javascript 为什么在Node.js中使用util.inherits和.call进行继承,javascript,node.js,inheritance,Javascript,Node.js,Inheritance,我想知道为什么在节点中创建新的流类时,我需要同时使用call和util.inherits 例如,在以下用于创建可读流的代码中,我必须同时使用这两种代码: var Readable = require('stream').Readable; var util = require('util'); var MyStream = function (options) { Readable.call(this, options) } util.inherits(MyStream, Read

我想知道为什么在节点中创建新的流类时,我需要同时使用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。。。将只运行可读的构造函数,可能会初始化一些变量,可能会进行一些初始设置

原型merge util.inheritsMyStream,可读;将在Readable上使用原型方法,并将其粘贴到MyStream的任何未来实例上

因此,如果没有构造函数调用,就无法获得初始设置,如果没有原型合并,就无法获得方法。从中可以看出为什么需要同时执行这两个步骤