2 ms·
Thanks for that. You're absolutely right -- the javascript dynamically-scoped "this" keyword strikes again. I've fixed it in the last commit, by using prototype
by jashkenas 17y ago
Thanks for that. You're absolutely right -- the javascript dynamically-scoped "this" keyword strikes again. I've fixed it in the last commit, by using prototype.__proto__, and adding an "extends" keyword for convenience. You can see it in action here:
http://jashkenas.github.com/coffee-script/#inheritance http://jashkenas.github.com/coffee-script/#inheritance
It's out with version 0.1.2 now.
- tlrobinson 17y agoBe careful with __proto__, it's non-standard and will break in some engines.
- vr 17y agoTo get the equivalent of __proto__ that works in every engine see goog.inherits from Closure.
- jashkenas 17y agoThanks for the pointer. I've pushed a commit that avoids __proto__, and produces this... CoffeeScript: Horse extends Animal JavaScript: Horse.__superClass__ = Animal.prototype; Horse.prototype = new Animal(); Horse.prototype.constructor = Horse; Calling super uses the __superClass__ reference. I hate to add it as an enumerable property, but there doesn't seem to be any other way to get at it, and at least it's on the class and not the object.
- vr 17y agoIt seems you should use "Horse extends Animal.prototype" in your examples or just make "Horse extends Animal" compile to "Horse.prototype.__proto__ = Animal.prototype". Also a subclass constructor should call the one of the superclass. Otherwise, a single Animal instance is shared by all subclass instances and for no reason Animal is created simply to declare a subclass.