HTML and CSS Reference
In-Depth Information
8.2.2 Prototypal Inheritance
ECMAScript 5 makes prototypal inheritance in JavaScript more obvious, and avoids
the clumsy constructor convention. In ES3, the only native way to create an object
sphere
that inherits from another object
circle
is by proxying via a constructor,
as Listing 8.5 shows.
Listing 8.5
Create an object that inherits from another object in ES3
"test es3 inheritance via constructors": function () {
var circle={/*...*/};
function CircleProxy() {}
CircleProxy.prototype = circle;
var sphere = new CircleProxy();
assert(circle.isPrototypeOf(sphere));
}
Additionally, there is no direct way of retrieving the prototype property in ES3.
Mozilla added a proprietary
__
proto
__
property that fixes both of these cases, as
in Listing 8.6.
Listing 8.6
Proprietary shortcut to accessing and setting prototype
__
proto
__
": function () {
"test inheritance via proprietary
var circle={/*...*/};
var sphere = {};
sphere.
__
proto
__
= circle;
assert(circle.isPrototypeOf(sphere));
}
The
__
proto
__
property is not codified by ES5. Instead, two methods were
added to work easily with prototypes. Listing 8.7 shows how we will be doing this
in the future.
Listing 8.7
Creating an object that inherits from another object in ES5
"test inheritance, es5 style": function () {
var circle={/*...*/};
var sphere = Object.create(circle);