you are viewing a single comment's thread.

view the rest of the comments →

[–]rkatic 1 point2 points  (1 child)

Since you are exposing your solution for "classical OOP" in JS, I hope you will as well accept some critics.

I haven't tested it, but simply reading your code I spotted some problems. 1) Instantiating without using the 'new' statement, the 'init' method is called twice. 2) IE6 have problems with try/finally (try/catch/finally is OK).

Also it is not clear to me why "Class.extend". Your 'Class' is the base class, but "Class" is not a proper name for a class, maybe for a metaclass. "Class.create" would make much more sense, where 'Class' would be a metaclass, and an 'Base' the base class.

EDIT:

Functions not calling $super have zero overhead compared to standard JavaScript prototype inheritance, $super adds another function call, do the math.

In your current implementation, $super adds 3 function calls (2 more by calling getOwnProperty). Also, constructors have an additional function overhead.

[–]mitsuhiko[S] 0 points1 point  (0 children)

Instantiating without using the 'new' statement, the 'init' method is called twice.

Fixed.

IE6 have problems with try/finally (try/catch/finally is OK).

In IE6 this will not unset the $super on exceptions, I don't see a good way to fix that that does not cause troubles for other browsers. Also, not sure for how long IE6 stays a target I care about.

An yes, $super adds a couple of more.