HTML and CSS Reference
In-Depth Information
that exposes the internal [[Prototype]] property. ECMAScript 5 (ES5) has
standardized this feature as the new method
Object.getPrototypeOf
(object)
, giving you the ability to look up an object's [[Prototype]]. In browsers
in which
__
proto
__
is not available, we can sometimes use the
constructor
property to get the [[Prototype]], but it requires that the object was in fact created
using a constructor and that the
constructor
property is set correctly.
7.3.3 Implementing
super
So, JavaScript has no
super
, and it is not possible to traverse the prototype chain
in a standardized manner that is guaranteed to work reliably cross-browser. It's still
possible to emulate the concept of
super
in JavaScript. Listing 7.30 achieves this
by calling the
Circle
constructor from within the
Sphere
constructor, passing
the newly created object as the
this
value.
Listing 7.30
Accessing the
Circle
constructor from within the
Sphere
constructor
function Sphere(radius) {
Circle.call(this, radius);
}
Sphere.inherit(Circle);
Running the tests confirms that sphere objects still work as intended. We can
employ the same technique to access “super methods” from other methods as well.
In Listing 7.31 we call the
area
method on the prototype.
Listing 7.31
Calling a method on the prototype chain
Sphere.prototype.area = function () {
return 4 * Circle.prototype.area.call(this);
};
Listing 7.32 shows a simple test of the new method.
Listing 7.32
Calculating surface area
"test should calculate sphere area": function () {
var sphere = new Sphere(3);
assertEquals(113, Math.round(sphere.area()));
}