All my knowledge of Lua is theoretical, but the explanation in pil (from which you link the older online version) is really messy. I can relate to how JavaScript prototypes are a clumsy solution for a real class system. JavaScript also has other flaws such as the disappearing "this" reference. When you feel that a language is working against you instead of for you, you feel frustrated.
Of course with Python you have the obnoxious self parameter, and Java is not functional (pun intended), but what can you do about it. Obvious sentence of the day: no language is perfect, and choosing the right one for a particular job is really hard.
Object oriented Lua
Posted Nov 19, 2011 9:46 UTC (Sat) by alankila (subscriber, #47141)
[Link]
The "this" reference does not disappear. It's just always set on every method call, and in this case it will be the contained DOM node, as you'd expect (it's the DOM node's method being called). You simply capture that other object into a variable -- a strategy you might not like -- but it's not unreasonable.
Incidentally, Java would allow people to write Node.this to represent the Node object, assuming the function objects were written as anonymous inner classes.
Object oriented JavaScript
Posted Nov 19, 2011 13:02 UTC (Sat) by man_ls (subscriber, #15091)
[Link]
It is especially annoying in callbacks: I would expect that this would be part of the function context as any other closure, but no: this points to the DOM node where the callback is running.
It can be worked around, of course: using a real closure, or calling the callback using weird call() techniques. But it makes for one of those "what were they thinking" moments. Same for prototypes, metatables' bastard son.
Awesome: A window manager that gets out of the way
Posted Nov 18, 2011 8:42 UTC (Fri) by alankila (subscriber, #47141)
[Link]
*sigh* I wouldn't exactly call that an object system. Sure, it's not *that* complex to do from scratch if you insist, but the point here is, you are manually implementing an object system.
Apparently he wanted python's semantics, too, and was dismayed to discover that some internal functions like __len were not overridable for some built-in types. I'm going to guess this restriction was because of performance.