HTML and CSS Reference
In-Depth Information
Listing 7.38 Implementing Sphere with inherit2
function Sphere(radius) {
Circle.call(this, radius);
}
Sphere.inherit2(Circle, {
area: function () {
return 4 * this._super();
}
});
7.3.3.2 Performance of the super Method
Using the inherit2 method we can create constructors and objects that
come pretty close to emulating classical inheritance. It does not, however, per-
form particularly well. By redefining all the methods and wrapping them in
closures, inherit2 will not only be slower than inherit when extend-
ing
this. _ super()
constructors,
but
calling
will
be
slower
than
calling
this. _ super.method.call(this) as well.
Further hits to performance are gained by the try-catch, which is used to ensure
that this. _ super is restored after the method has executed. As if that wasn't
enough, the method approach only allows static inheritance. Adding new methods
to Circle.prototype will not automatically expose _ super in same named
methods on Sphere.prototype . To get that working we would have to imple-
ment some kind of helper function to add methods that would add the enclosing
function that sets up _ super . In any case, the result would be less than elegant and
would introduce a possibly significant performance overhead.
I hope you never use this function; JavaScript has better patterns in store. If
anything, I think the _ super implementation is a testament to JavaScript's flexi-
bility. JavaScript doesn't have classes, but it gives you the tools you need to build
them, should you need to do so.
7.3.3.3 A _ super Helper Function
A somewhat saner implementation, although not as concise, can be achieved by
implementing _ super as a helper function piggybacking the prototype link, as
seen in Listing 7.39.
 
Search WWH ::




Custom Search