Два заблуждения по поводу части потока преобразования документации 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);
Зачем нам нужно проверять
this instanceof MyTransform
? Насколько я знаю, пока мы вызываемnew MyTransform()
, оценкаthis instanceof MyTransfrom
всегда будет возвращаться. Возможно, используяMyTransform()
создатьTransform
instance можно найти во многих кодовых базах? Это единственная причина, по которой я мог предположить.Какова цель
util.inherits(MyTransform, Transform);
? Просто чтобы убедиться, чтоnew MyTransform() instanceof Transform
возвращаетсяtrue
?
Спасибо за ваше время заранее!
1 ответ
- это просто функция, как и любая другая функция. В этом нет ничего особенного, поэтому вызов его как функции (без ) будет работать отлично. Так что же должно произойти в таком случае? В соответствии с этим кодом: перейти к вызову конструктора и вернуть результирующий объект экземпляра.
- Согласно документации для этой функции, она обеспечивает наследование прототипа, потому что вы снова написали
MyTransform
как обычная функция: хотя вы можете использовать любую функцию, вы не написали код, необходимый для правильного наследования прототипа, поэтому с помощьюnew
даст вам совершенно бесполезный предмет. Это означает, что либо вы сами добавляете код, необходимый для настройки наследования прототипа, либо просите служебную функцию сделать это за вас.