首先我們先創建一個構造函數,並創建兩個實例
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]