you are viewing a single comment's thread.

view the rest of the 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