JS學習-原型鏈的理解

首先我們先創建一個構造函數,並創建兩個實例

function shirt(){
        this.name="";
        this.age="";
        this.height="";
        this.weight="";
    }
    var shirt1=new shirt();
    var shirt2=new shirt();

shirt.prototype 任何一個函數都有此屬性,但它只有函數當做類來用的時候纔有意義,把所有共享的方法都保存在此屬性上。這個屬性明顯是一個對象型。
我覺得可以通俗的將原型理解爲共享雲,之後定義的實例都可以訪問,也可以修改。
實例的查找是分優先級的,首先在自己本身中查找,如果查找不到就到共享中去查找,如:

    shirt.prototype.fn=function(){console.log("xxx");};
    console.log(shirt1.fn)

shirt1中是不存在fn屬性的,但是原型中存在,故可以查找到。
shirt1.fn跟shirt2.fn以及shirt.fn都是同一個

實例修改原型

    shirt.prototype.a=[1,2,3];
    shirt1.a=1;
    console.log(shirt2.a);
    console.log(shirt1.a);

此時的打印結果爲[1,2,3]和1
shirt1.a是給自己本身寫入了一個屬性a,不涉及到查找,所以,不會改變原型中的a

shirt1.a[1]=12;
    console.log(shirt2.a);
    console.log(shirt1.a);

這次涉及到查找,要先找a在找a裏面索引爲1的內容,故 訪問的是原型中的a,原型中的a改變了彈出
[1,12,3]和[1,12,3]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章