一勿侯、原型的概念:
1蛉腌、原型的概念:執(zhí)行構(gòu)造函數(shù)代碼時(shí)官份,js系統(tǒng)會(huì)給這個(gè)構(gòu)造函數(shù)創(chuàng)建一個(gè)原型對象,構(gòu)造函數(shù)中也包含一個(gè)prototype屬性烙丛,指向這個(gè)原型對象舅巷。
2、原型有什么作用:
???? a河咽、通過原型給系統(tǒng)構(gòu)造函數(shù)添加一些特殊的方法(如:數(shù)組元素的求和)這樣通過Array創(chuàng)建出來的對象都具有了這個(gè)方法钠右。
???? b、通過原型給自定義的構(gòu)造函數(shù)添加屬性忘蟹、方法飒房,創(chuàng)建出來的對象所對應(yīng)的屬性、方法就是原型中的屬性寒瓦、方法情屹,不需要再開辟新的空間,節(jié)約了內(nèi)存杂腰。
這個(gè)案例中使用了(prototype屬性垃你,后面有具體介紹)
二、原型相關(guān)的屬性喂很、函數(shù):
??? 原型屬性:通過原型添加在構(gòu)造函數(shù)中的屬性惜颇;
??? 原型方法:通過原型添加在構(gòu)造函數(shù)中凡人函數(shù);
??? 實(shí)例屬性:通過原型添加在構(gòu)造函數(shù)中的函數(shù)少辣;
??? 實(shí)例方法:直接寫在構(gòu)造函數(shù)中的方法凌摄;
需要注意的是? 構(gòu)造函數(shù) 原型對象以及實(shí)例之間的關(guān)系:
prototype:構(gòu)造函數(shù)中的一個(gè)屬性,指向他所對應(yīng)的原型對象漓帅;
constructor:構(gòu)造函數(shù)所對應(yīng)的原型對象中的一個(gè)屬性锨亏,用來指向這個(gè)對象所對應(yīng)的構(gòu)造函數(shù)痴怨;
__proto__或者[[prototype]]:實(shí)例對象中的原型屬性,指向創(chuàng)造他的構(gòu)建函數(shù)對應(yīng)的原型對象(但我們無法通過此方法訪問這個(gè)屬性器予,在規(guī)定中是不允許的)浪藻;
三、構(gòu)造函數(shù)創(chuàng)建對象里所運(yùn)用到的運(yùn)算符的使用說明:
in運(yùn)算符可以用來判斷某個(gè)對象是否含有某個(gè)屬性乾翔,不管是實(shí)例的還是他本身的爱葵;
eg:alert(‘name’ in cat);//trun
hasOwnProperty:每個(gè)實(shí)y例對象都有一個(gè)hasOwnProperty()方法反浓,用來判斷某一個(gè)屬性到底是實(shí)例屬性還是繼承至prototype對象的屬性萌丈;
function Cat( ){
this.name = name;
}
var cat = new Cat();
var cat1 = new Cat()
Cat.prototype.type = "age"
eg:alert(cat.hasOwnProperty('name')); //true
???????? alert(cat1.hasOwnProperty('type')); //false