重寫(xiě)原型后的變化
盡管可以隨時(shí)為原型添加屬性和方法,并且修改能夠立即在所有對(duì)象實(shí)例中反映出來(lái),但如果是重寫(xiě)整個(gè)原型對(duì)象,那么情況就不一樣了。我們知道,調(diào)用構(gòu)造函數(shù)時(shí)會(huì)為實(shí)例添加一個(gè)指向最初原型的[[Prototype]]指針,而把原型修改為另外一個(gè)對(duì)象就等于切斷了構(gòu)造函數(shù)與最初原型之間的聯(lián)系。
請(qǐng)記?。簩?shí)例中的指針僅指向原型,而不指向構(gòu)造函數(shù)
function Person(){}
var friend = new Person();
Person.prototype = {
constructor: Person,
name : "Nicholas",
age : 29,
job : "Software Engineer",
sayName : function () {
alert(this.name);
}
};
friend.sayName(); //error
在這個(gè)例子中,我們先創(chuàng)建了 Person 的一個(gè)實(shí)例,然后又重寫(xiě)了其原型對(duì)象。然后在調(diào)用friend.sayName()時(shí)發(fā)生了錯(cuò)誤,因?yàn)閒riend指向的原型中不包含以該名字命名的屬性。