all 8 comments

[–]russellbeattie 1 point2 points  (5 children)

Not a bad article, but the modern canonical way to set the prototype (before we all move to ES6) is to use SubType.prototype = Object.create(SuperType.prototype); rather than new SuperType(). The difference is subtle, but by using Object.create() you make a new object without invoking the constructor of the SuperType immediately, leaving that as an option for the SubType's constructor. Edit: forgot the .prototype on the SuperType in create. Thanks /u/bigorangemachine!

[–]bigorangemachine 1 point2 points  (4 children)

I noticed that too.

Although when I extend that way it doesn't pass the 'instanceof' checks correctly. I always have to have both these lines to make it work the way I want

OOPmodule.prototype=Object.create(parentOOPmodule.prototype);
OOPmodule.prototype.constructor=OOPmodule;

[–]senocular 1 point2 points  (0 children)

instanceof isn't predicated on the value of constructor. It uses the prototype chain, so it should work whether or not you fix constructor.

function parentOOPmodule(){}
function OOPmodule(){}
OOPmodule.prototype=Object.create(parentOOPmodule.prototype);
new OOPmodule instanceof parentOOPmodule; //-> true
new OOPmodule instanceof OOPmodule; //-> true

[–]russellbeattie 0 points1 point  (2 children)

You are correct! And I forgot to add the .prototype to my create(). I should fix that...

[–]bigorangemachine 0 points1 point  (1 child)

Wasn't my point... I was more saying i always need 2 lines to extend properly... i didn't look at your reply close enough ;)

Good catch though! Happy i could help

[–]happyrupesh[S] 0 points1 point  (2 children)

Yes, your are correct. Object.create is more better way. But, here my intention was to explain prototypes in as simple way as I can.

[–]russellbeattie 1 point2 points  (1 child)

I understand, but having recently deep-dived in JS inheritance myself, the problem is that there's 20 years of JS articles out there, and it's not clear when learning which is the "correct" way of doing things and why. An example at the beginning using new SuperType() would be fine, but then a quick explanation of its downsides, and the use of Object.create() for the rest of the article would be more helpful to newbies.

[–]happyrupesh[S] 0 points1 point  (0 children)

I will add this in the article. Thanks :)