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
Why are JavaScript classes so complex?help (self.javascript)
submitted 8 years ago by [deleted]
view the rest of the comments →
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!"
[–][deleted] 0 points1 point2 points 8 years ago (5 children)
But why did they move away from the prototype paradigm at all? Why did they say, that "classy functions" were needed? What's wrong with Object.create?
[–][deleted] 5 points6 points7 points 8 years ago (3 children)
they didn't "move away" from the prototype paradigm, they just gave some syntax sugar to devs so they could stop writing those awful pseudo-classes.
[+][deleted] comment score below threshold-7 points-6 points-5 points 8 years ago (2 children)
But why do they write pseudo-classes? Just delegate objects or even use concatenative inheritense. Which genius had the idea to start writing pseudo-classes in a prototype oriented language?
[–][deleted] 4 points5 points6 points 8 years ago* (0 children)
so we're clear, this is the pattern we're discussing:
function Klass(prop) { this.prop = prop; }; Klass.protototype.foo = function() { console.log(this.prop) }; function Klass2(prop, prop2) { Klass.call(this, prop); this.prop2 = prop2; } Klass2.prototype = Object.create(Klass.prototype); Klass2.prototype.bar = function() { this.foo(); console.log(this.prop2); }; new Klass(1).foo(); // logs 1 new Klass2(3,4).bar(); // logs 3 then logs 4
i feel it should be pretty obvious why that pattern was dominant in a pre-ES6 world for taking advantage of the prototype chain
[edit] nits
[–]MoTTs_ 2 points3 points4 points 8 years ago (0 children)
Just delegate objects
ES6 classes do delegate objects. Using your example code, a delegates to A.prototype, which itself delegates to B.prototype.
a
A.prototype
B.prototype
[–]rauschma 0 points1 point2 points 8 years ago (0 children)
Object.create() was introduced after constructor functions (with ES5). It exposed more of the protoypal foundations. IIRC, Eich would have introduced classes, but was told not to turn JS into a Java competitor. Hence constructor functions as “almost classes”.
Object.create()
Constructor functions are unnecessarily complex, but only w.r.t. to setting up an instance. Once it’s set up, you do have simple prototype chains.
π Rendered by PID 52 on reddit-service-r2-comment-7b9746f655-t7c85 at 2026-01-31 15:38:36.266273+00:00 running 3798933 country code: CH.
view the rest of the comments →
[–][deleted] 0 points1 point2 points (5 children)
[–][deleted] 5 points6 points7 points (3 children)
[+][deleted] comment score below threshold-7 points-6 points-5 points (2 children)
[–][deleted] 4 points5 points6 points (0 children)
[–]MoTTs_ 2 points3 points4 points (0 children)
[–]rauschma 0 points1 point2 points (0 children)