I’m having some trouble understanding the IF clause at the end of this function from Pro JavaScript Design Patterns:
function extend(subClass, superClass) {
var F = function() {};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
subClass.superclass = superClass.prototype;
if(superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
}
The book explains that these lines ensure that the superclass’s constructor attribute is correctly set, even if the superclass is the Object class itself. Yet, if I omit those three lines and do the following:
function SubClass() {};
extend(SubClass, Object);
alert(Object.prototype.constructor == Object);
The alert says ‘true’, which means the superclass’s constructor is set correctly even without those last three lines. Under what conditions, then, does this IF statement do something useful?
Thanks.
The problem that those two lines try to avoid, is generally produced when you replace the
prototypeproperty of a Constructor Function, for example:When functions objects are created, the
prototypeproperty is initialized with a new object, which contains aconstructorproperty that refers to the function itself, e.g.:When you replace the
prototypeproperty with another object, this object has it’s ownconstructorproperty, generally inherited from other constructor, or fromObject.prototype.Recommended articles: