Два заблуждения по поводу части потока преобразования документации node.js в стиле до ES6

Вот документ , с которым я смущен.

При использовании конструкторов в стиле до ES6

      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всегда будет возвращаться. Возможно, используя MyTransform()создать Transforminstance можно найти во многих кодовых базах? Это единственная причина, по которой я мог предположить.

  2. Какова цель util.inherits(MyTransform, Transform);? Просто чтобы убедиться, что new MyTransform() instanceof Transformвозвращается true?

Спасибо за ваше время заранее!

1 ответ

  1. это просто функция, как и любая другая функция. В этом нет ничего особенного, поэтому вызов его как функции (без ) будет работать отлично. Так что же должно произойти в таком случае? В соответствии с этим кодом: перейти к вызову конструктора и вернуть результирующий объект экземпляра.
  2. Согласно документации для этой функции, она обеспечивает наследование прототипа, потому что вы снова написали MyTransformкак обычная функция: хотя вы можете использовать любую функцию, вы не написали код, необходимый для правильного наследования прототипа, поэтому с помощью newдаст вам совершенно бесполезный предмет. Это означает, что либо вы сами добавляете код, необходимый для настройки наследования прототипа, либо просите служебную функцию сделать это за вас.
Другие вопросы по тегам