关于 ES6 之前样式的 node.js 文档的转换流部分的两个混淆
Two confusions about transform stream part of node.js documentation around pre-ES6 style
这里是doc我比较困惑的
When using pre-ES6 style constructors
const { Transform } = require('stream');
const util = require('util');
function MyTransform(options) {
if (!(this instanceof MyTransform))
return new MyTransform(options);
Transform.call(this, options);
}
util.inherits(MyTransform, Transform);
为什么要检查this instanceof MyTransform
?据我所知,只要我们调用 new MyTransform()
,this instanceof MyTransfrom
的计算将始终 return true
。也许使用 MyTransform()
创建一个 Transform
实例可以在许多代码库中找到?这是我能猜到的唯一原因。
util.inherits(MyTransform, Transform);
的目的是什么?只是为了确保 new MyTransform() instanceof Transform
returns true
?
提前感谢您抽出时间!
MyTransform
和其他函数一样只是一个函数。它没有什么特别之处,因此将它称为 作为 函数(没有 new
)将工作得很好。那么在这种情况下会发生什么呢?根据这段代码:通过构造函数调用并返回结果实例对象。
- 根据 the documentation for that function 它强制执行原型继承,因为您再次将
MyTransform
编写为一个普通函数:虽然您可以将 new
与任何函数一起使用,但您没有编写正确原型继承所需的任何代码,因此使用 new
会给你一个完全无用的对象。这意味着您要么添加必要的代码来自己设置原型继承,要么让实用函数为您完成。
这里是doc我比较困惑的
When using pre-ES6 style constructors
const { Transform } = require('stream');
const util = require('util');
function MyTransform(options) {
if (!(this instanceof MyTransform))
return new MyTransform(options);
Transform.call(this, options);
}
util.inherits(MyTransform, Transform);
为什么要检查
this instanceof MyTransform
?据我所知,只要我们调用new MyTransform()
,this instanceof MyTransfrom
的计算将始终 returntrue
。也许使用MyTransform()
创建一个Transform
实例可以在许多代码库中找到?这是我能猜到的唯一原因。util.inherits(MyTransform, Transform);
的目的是什么?只是为了确保new MyTransform() instanceof Transform
returnstrue
?
提前感谢您抽出时间!
MyTransform
和其他函数一样只是一个函数。它没有什么特别之处,因此将它称为 作为 函数(没有new
)将工作得很好。那么在这种情况下会发生什么呢?根据这段代码:通过构造函数调用并返回结果实例对象。- 根据 the documentation for that function 它强制执行原型继承,因为您再次将
MyTransform
编写为一个普通函数:虽然您可以将new
与任何函数一起使用,但您没有编写正确原型继承所需的任何代码,因此使用new
会给你一个完全无用的对象。这意味着您要么添加必要的代码来自己设置原型继承,要么让实用函数为您完成。