关于 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);
  1. 为什么要检查this instanceof MyTransform?据我所知,只要我们调用 new MyTransform()this instanceof MyTransfrom 的计算将始终 return true。也许使用 MyTransform() 创建一个 Transform 实例可以在许多代码库中找到?这是我能猜到的唯一原因。

  2. util.inherits(MyTransform, Transform); 的目的是什么?只是为了确保 new MyTransform() instanceof Transform returns true?

提前感谢您抽出时间!

  1. MyTransform 和其他函数一样只是一个函数。它没有什么特别之处,因此将它称为 作为 函数(没有 new)将工作得很好。那么在这种情况下会发生什么呢?根据这段代码:通过构造函数调用并返回结果实例对象。
  2. 根据 the documentation for that function 它强制执行原型继承,因为您再次将 MyTransform 编写为一个普通函数:虽然您可以将 new 与任何函数一起使用,但您没有编写正确原型继承所需的任何代码,因此使用 new 会给你一个完全无用的对象。这意味着您要么添加必要的代码来自己设置原型继承,要么让实用函数为您完成。