原型與原型鏈

2021-08-01 15:42:37 字數 1436 閱讀 5908

原型有兩種:

1為顯示原型,2為隱式原型

1.    顯示原型

a)     prototype

b)     每個函式都有乙個顯示原型prototype當然函式也有隱式原型

c)     原型就是函式的乙個屬性,這個屬性名叫做prototype

d)     這個屬性即prototype的型別是object

2.    隱式原型

a)     __proto__

b)     每個物件都有乙個隱式原型,並且沒有顯示原型,函式這個一等公民除外.

c)     __proto__也是函式的乙個屬性

d)     型別仍然是object

乙個特殊的存在函式物件:既是物件又是函式,所以他又有prototype又有__proyo__

什麼是函式物件   

就是這樣的 var f = new function;他console.dir的時候他兩個都存在

而 var ff = new string;               他console.dir的時候只存在__proto__

懵逼了,函式真tm 是一等公民. 變數. 物件, 函式

函式是既有prototype又有__proto__的

顯示原型與隱式原型的關係,個人理解:把構造器當老子,他們建立的物件就是兒子.每個老子的顯示原型等於他們的每個兒子的隱式原型.就是老子的顯性基因,都傳給兒子了,變成兒子的隱式基因,並且是完全相等的.而且,這些兒子很坑爹,他們的其中乙個新增了什麼基因,他們老子也會被新增上,而老子新增上了,所有的兒子也都會被新增上,

當然,如果你想控制,讓某個兒子的東西不影響家裡其他人.你可以動他的自有屬性,計算機在查詢這個屬性時,會優先查詢自有屬性,自有找不到才會查詢原型屬性

計算機在物件中找屬性的具體方法是:

1.    找自有屬性.找到返回.

2.    找不到.找隱式原型.找到返回

3.    找不到,找隱式原型的隱式原型,找到返回,找不到,則繼續找隱式的隱式的隱式

4.    整個過程就是obj.__proto__.__proto__ 這個過程中,只要找到就不往下找了,然後返回值,最上級,就是到頂的乙個是null

5.    如果都沒有找到,返回undefined

當然.我們在平時使用的時候,__proto__是可以省略的,所以他叫隱式原型

應用:比如說,我們建立了乙個動物類.可以新增一些屬性到顯示原型中.這樣我們建立物件的時候,所有的物件都有了這個屬性.

再比如,陣列,除了系統自己定義的屬性外,我們絕對還不夠,我們希望有乙個屬性,可以讓陣列中重複的數字刪除.我們就可以給array這個構造器的prototype顯示原型新增乙個屬性.這樣以後不管你什麼時候建立了乙個陣列,只有你new array 你就可以使用這個屬性,

原型與原型鏈

圖中一共標了7條線,就一條一條的講,講完了就應該懂了 已知 1.函式是物件,原型也是物件 2.proto 每乙個物件都有,prototype是函式特有的 3.物件的 proto 屬性指向該物件建構函式的 原型 prototype 線1.物件f1的 proto 屬性指向其建構函式的原型 其建構函式 f...

原型與原型鏈

值型別 string,number,boolean,undefined function person var p1 newperson p1即為建構函式person 的例項化物件 var arr 10 20,30 40,50 60 這種語法糖形式的物件建立,是由array 函式建立簡化而來的。這個...

原型與原型鏈

每個函式都有乙個prototype屬性,這個屬性是乙個指標,指向乙個物件,即原型物件。原型物件包含所有例項共享的屬性和方法。使用原型物件可以讓所有例項共享它所包含的方法。function person person.prototype.name ju person.prototype.sayname...