- a function has property "prototype", the prototype object's points back to the function itself.
function Dog(name) { } //the following are true alert(Dog.prototype.constructor == Dog); alert(Dog.constructor == Function); alert(Object.constructor == Function); -
var spot = new Dog("fred");What does this mean? It means the above picture.var spot = new Dog("Spot"); // Dog.prototype is the prototype of spot alert(Dog.prototype.isPrototypeOf(spot)); // spot inherits the constructor property // from Dog.prototype alert(spot.constructor == Dog.prototype.constructor); alert(spot.constructor == Dog); // But constructor property doesn’t belong // to spot. The line below displays "false" //because a spot is not a function, only fucntion has constructor alert(spot.hasOwnProperty("constructor")); //but why spot.constructor is not null, it turns up that if the runtime find //a property is null, it will check its prototype's property // The constructor property belongs to Dog.prototype // The line below displays “true” alert(Dog.prototype.hasOwnProperty("constructor")); alert(Dog.prototype) //alert [object Object]The following change depict the property sovling process.
Now let's look how prototype inheritance work
function Pet()
{
this.walk = function()
{ alert("pet walk"); }
}
var p = new Pet();
p.walk();
function Dog(){}
//prototype is an instance(object)
Dog.prototype = p;
var d = new Dog();
d.walk();
No comments:
Post a Comment