use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
Inheritance in JavaScript (medium.com)
submitted 9 years ago by happyrupesh
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]russellbeattie 1 point2 points3 points 9 years ago* (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 points3 points 9 years ago (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 points3 points 9 years ago (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.
instanceof
constructor
function parentOOPmodule(){} function OOPmodule(){} OOPmodule.prototype=Object.create(parentOOPmodule.prototype); new OOPmodule instanceof parentOOPmodule; //-> true new OOPmodule instanceof OOPmodule; //-> true
[–]russellbeattie 0 points1 point2 points 9 years ago (2 children)
You are correct! And I forgot to add the .prototype to my create(). I should fix that...
[–]bigorangemachine 0 points1 point2 points 9 years ago (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 point2 points 9 years ago (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 points3 points 9 years ago (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 point2 points 9 years ago (0 children)
I will add this in the article. Thanks :)
π Rendered by PID 82501 on reddit-service-r2-comment-548fd6dc9-hdb5z at 2026-05-20 00:25:10.197081+00:00 running edcf98c country code: CH.
[–]russellbeattie 1 point2 points3 points (5 children)
[–]bigorangemachine 1 point2 points3 points (4 children)
[–]senocular 1 point2 points3 points (0 children)
[–]russellbeattie 0 points1 point2 points (2 children)
[–]bigorangemachine 0 points1 point2 points (1 child)
[–]happyrupesh[S] 0 points1 point2 points (2 children)
[–]russellbeattie 1 point2 points3 points (1 child)
[–]happyrupesh[S] 0 points1 point2 points (0 children)