論js里 面向對象的原型

一、原型的概念:

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


最后需要注意的是:使用構造函數創建的對象的constructor屬性指向他的構造函數,使用字面量創建的對象的constructor屬性指向object。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容