/**
*@author 程無衣
*@description 關於在原型對象中屬性被覆蓋
*/
function Person(){}
Person.prototype={
constructor:Person,
age:24
}
var person1= new Person();
person1.age=20;
console.log(person1.age);//20
/*輸出的是實例的age屬性
說明Person原型對象的age屬性被實例
的age屬性覆蓋了
*/
var person2= new Person();
console.log(person2.age);//24
//輸出的是Person的原型對象中的age屬性
//---------------------------------------------------------------------
//如果說構造函數中也有屬性的話會怎么樣呢?
function Person(){
this.age=26;
}
Person.prototype={
constructor:Person,
age:24
}
var person1= new Person();
person1.age=20;
console.log(person1.age);//20
/*
我們發現實例化后的屬性沒有受到影響,當需要age屬性
的時候,原型鏈首先還是在實例的屬性中搜索這個age屬性
所以我們看到person2.age的值等於20
*/
var person2= new Person();
console.log(person2.age);//26
//構造函數定義的就是實例的屬性,所以這里的person2的age屬性是26
delete person2.age;
//使用delete刪除實例的屬性
console.log(person2.age);//24
console.log(person2.name);//undefined
//正如期待的那樣,實例的屬性被刪除后,在原型對象處搜索到了age屬性
總結:在js的原型中。屬性的搜索順序是從實例屬性開始,沒有,再沿着原型鏈找到原型對象。再沒有,就返回未定義。
下次加入繼承再來看看是不是按照預期的實現鏈式查找。
未完待續