Reputation: 1919
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 invoke new MyTransform()
, evaluation of this instanceof MyTransfrom
will always return true
. Maybe using MyTransform()
to create a Transform
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 that new MyTransform() instanceof Transform
returns true
?
Thank you for your time in advance!
Upvotes: 0
Views: 80
Reputation: 53705
MyTransform
is just a function like any other function. There's nothing special about it, and so calling it as a function (without new
) 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 use new
with any function, you didn't write any of the code necessary for proper prototype inheritance so using new
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.Upvotes: 1