一、原型的概念:
1、原型的概念:執行構造函數代碼時,js系統會給這個構造函數創建一個原型對象,構造函數中也包含一個prototype屬性,指向這個原型對象。
2、原型有什么作用:
???? a、通過原型給系統構造函數添加一些特殊的方法(如:數組元素的求和)這樣通過Array創建出來的對象都具有了這個方法。
???? b、通過原型給自定義的構造函數添加屬性、方法,創建出來的對象所對應的屬性、方法就是原型中的屬性、方法,不需要再開辟新的空間,節約了內存。
這個案例中使用了(prototype屬性,后面有具體介紹)
二、原型相關的屬性、函數:
??? 原型屬性:通過原型添加在構造函數中的屬性;
??? 原型方法:通過原型添加在構造函數中凡人函數;
??? 實例屬性:通過原型添加在構造函數中的函數;
??? 實例方法:直接寫在構造函數中的方法;
需要注意的是? 構造函數 原型對象以及實例之間的關系:
prototype:構造函數中的一個屬性,指向他所對應的原型對象;
constructor:構造函數所對應的原型對象中的一個屬性,用來指向這個對象所對應的構造函數;
__proto__或者[[prototype]]:實例對象中的原型屬性,指向創造他的構建函數對應的原型對象(但我們無法通過此方法訪問這個屬性,在規定中是不允許的);
三、構造函數創建對象里所運用到的運算符的使用說明:
in運算符可以用來判斷某個對象是否含有某個屬性,不管是實例的還是他本身的;
eg:alert(‘name’ in cat);//trun
hasOwnProperty:每個實y例對象都有一個hasOwnProperty()方法,用來判斷某一個屬性到底是實例屬性還是繼承至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