Sometime, a object's member comes from it's own definition, if it is not defined, will ask check its prototype's definition, same thing apply to the prototype, if prototype object has that definition, that is returned, if not prototype object'check its prototype object, the process continue until prototype object is undefined.
function User() { this.sayHi = function(){ alert("hi");}; } User.prototype.sayYes = function() { alert("Yes"); } User.sayHello = function() { alert("hello"); } var u = new User(); alert(User.prototype.sayYes); u.sayYes(); //this function comes from User.prototype alert(User.prototype.sayHi); //undefined u.sayHi(); //this function comes from the object u, in the constructor, sayHi is added to object User.sayHello(); //hello u.sayHello(); //throw exception
Please note the User itself is object created by Function, because alert(User.constructor == Function); is true. So its definition User.sayHello is not defined its prototype, u objects can not use this method.
No comments:
Post a Comment