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 MyTransfromwill always returntrue. Maybe usingMyTransform()to create aTransforminstance 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 Transformreturnstrue?
Thank you for your time in advance!
                        
MyTransformis 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.MyTransformas just a plain function: while you can usenewwith any function, you didn't write any of the code necessary for proper prototype inheritance so usingnewwill 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.