Hacker News new | past | comments | ask | show | jobs | submit login
Understanding Javascript OOP (killdream.github.com)
154 points by old_sound on Oct 3, 2012 | hide | past | favorite | 19 comments



The ES6 draft spec now includes the (maximally minimal) class spec that was hashed out at the July TC 39 meeting. You can read the spec here: http://wiki.ecmascript.org/doku.php?id=harmony:specification... and see some examples here: http://wiki.ecmascript.org/doku.php?id=strawman:maximally_mi...

There's a cool project, Harmonizr (https://github.com/jdiamond/harmonizr) which transpiles ES6 to ES5, which you can leverage to start using classes, modules, arrow syntax, etc. now. Demo: http://jdiamond.github.com/harmonizr/demo/demo.html


From my read of the proposal ES6 classes feel more like syntactic sugar for the flawed concept of new/constructor/obj.prototype, you still have to mess with obj.prototype to achieve some tasks (e.g. define non-enumerable property). I would stay away from it and just use plain objects with Object.create().


thank the lord, i can't imagine something as ubiquitous as javascript still has no syntactically intuitive class system


Why not? Classes are just one implementation/realization of OOP. They're the most common, to be sure, but they're by no means the only way to do objects, nor are they necessarily the best.

“There is more to OOP, Horatio, than is dreamt of in your philosophy.”


The MooTools library implements declarative class syntax for regular javascript:

http://mootools.net/docs/core/Class/Class


The next trick is for libraries to make sure their homegrown class systems are migrated to ES6 classes, or interop with consistent semantics.


MooTools has always aimed to be compliant with the next version of Ecma. In a lot of ways it is a shim for whatever is next.


Thanks for that. In my mind I've been calling C++, C#, etc. "class-based" programming since the design/programming phase is really focussed on classes. I've not much experience with prototype-based programming other than the occasional blurb. This is a nice intro.


If you have the time, go look at an explanation of NewtonScript then Self. NewtonScript takes the concepts of Self and created a pretty nice little language that is a little more accessible than Self (unless you know Smalltalk, then go with Self first).

I like prototype-based languages and really wish that NewtonScript had a little better syntax. On the other hand, I have never been fond of Javascript and don't know why.

http://selflanguage.org

http://en.wikipedia.org/wiki/NewtonScript and http://waltersmith.us/wp-content/uploads/2005/12/OOPSLA95.pd...


Cognitive dissonance, likely. It doesn't look like what it is, no matter which part of it you're using at the time. Its selfish features aren't Self, its speech impediment isn't really a Lisp, its coffee-flavouring isn't Java... No matter which door you open, you get a preliminary sense of déja vu, then realise that you haven't actually been there before; it's just something that reminds you of something else. It takes a while to settle into JS mode, where the language is just what it is, and not "sort of like X, but completely different". (Once I'm there, I like to stay there—but there's always something else to do that drags me into another language, and when I come back, I experience the same cycle process again.)


> This is a nice intro.

... with a misleading title since it's about "Prototypical inheritance".


I was just looking for something like this last week, this is a great tutorial, thanks for posting it up here.

When Anders was discussing the new TypeScript release, he was mentioning how it more clearly mimicked the ES6 specification. Looking at some of the examples posted by joubert, you can see the similarities.

TypeScript transpiles down to ES5 much like Harmonizr does as well.

Very interesting stuff.


I thought I had read it all at this point. I really like the deep dive into Object. No one ever goes beyond Object.create() and that's usually just as an example of how not to create new objects :)



Really good tutorial. I enjoyed reading it.


This is superb.


very well done.


This is the best js tutorial I've seen in a while


Great tutorial - thank you.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: