HTML and CSS Reference
In-Depth Information
When we assign a new object to Circle.prototype , JavaScript no longer
creates a constructor property for us. This means that the [[Get]] for con-
structor will go up the prototype chain until a value is found. In the case of our
constructor, the result is Object.prototype whose constructor property
is Object , as seen in Listing 7.20.
Listing 7.20 Broken constructor property
"test constructor is Object when prototype is overridden":
function () {
function Circle() {}
Circle.prototype = {};
assertEquals(Object, new Circle().constructor);
}
Listing 7.21 solves the problem by assigning the constructor property
manually.
Listing 7.21 Fixing the missing constructor property
Circle.prototype = {
constructor: Circle,
// ...
};
To avoid the problem entirely, we could also extend the given prototype prop-
erty in a closure to avoid repeating Circle.prototype for each property. This
approach is shown in Listing 7.22.
Listing 7.22 Avoiding the missing constructor problem
(function (p) {
p.diameter = function () {
return this.radius * 2;
};
p.circumference = function () {
return this.diameter() * Math.PI;
};
p.area = function () {
return this.radius * this.radius * Math.PI;
};
}(Circle.prototype));
 
Search WWH ::




Custom Search