为什么在Node.js中使用util.inherits和.call来inheritance
我想知道为什么,当在节点中创build一个新的stream
类时,我需要同时使用call
和util.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.call
从Readable
调用构造函数,因此util.inherits
是不必要的。
util.inherits
会将Readable
的原型合并到MyStream
。 这个原型合并和构造函数调用都需要更完整的inheritance。
构造函数调用Readable.call( ... )
将只是通过Readable
的构造函数运行,可能初始化一些variables,也许做一些初始设置。
原型合并util.inherits(MyStream, Readable);
将采用Readable
的原型方法,并将其粘贴到任何未来的MyStream
实例上。
所以没有构造函数调用,你不会得到最初的设置,没有原型合并,你没有得到的方法。 从中你可以看到为什么这两个步骤都需要。