Here is the doc I am confused with.
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);
Why do we need to check
this instanceof MyTransform
? As far as I know, as long as we invokenew MyTransform()
, evaluation ofthis instanceof MyTransfrom
will always returntrue
. Maybe usingMyTransform()
to create aTransform
instance can be found in many code bases? This is the only reason I could guess.What is the purpose of
util.inherits(MyTransform, Transform);
? Just to ensure thatnew MyTransform() instanceof Transform
returnstrue
?
Thank you for your time in advance!
MyTransform
is just a function like any other function. There's nothing special about it, and so calling it as a function (withoutnew
) will work perfectly fine. So what should happen in that case? According to this code: fall through to a constructor call and returning the resulting instance object.MyTransform
as just a plain function: while you can usenew
with any function, you didn't write any of the code necessary for proper prototype inheritance so usingnew
will give you a completely useless object. That means either you add the code necessary to set set up prototype inheritance yourself, or you ask a utility function to do that for you.