js的原型和原型鏈理解

2022-02-26 17:11:57 字數 904 閱讀 1187

以以下**為例:

let arr = [1, 3, 2, 0]

arr.reverse()

arr.tostring()

我們使用console.dir(arr)命令

發現arr._proto_屬性上有reverse()和tostring()方法了

用console.dir(arr)發現,arr不僅有我們定義的四個值,其proto屬性上還有constructor和reverse()和tostring()方法,我們並未定義它是從何而來呢?

這跟_proto_有關係,當我們讀取reverse()方法時,js引擎會做以下事情:

1.先從自身屬性找,沒有進入下一步

2.從arr._proto_物件上找,看有沒有reverse()屬性。發現arr._proto_物件上有reverse()屬性,其實arr.reverse()實際上就是arr._proto_.reverse()

3.如果arr._proto_物件上找不到,就依次從arr._proto_._proto_物件上找,arr._proto_._proto_._proto_,arr._proto_._proto_._proto_,一直到找到reverse()屬性或者_proto_屬性為null為止。

上面的過程就是「讀」屬性的搜尋過程,這個是連著_proto_組成的鍊子一起走的,即稱之為原型鏈。

流程圖

同理tostring屬性。

參考資料

理解js原型和原型鏈

一.普通物件和函式物件 js中,萬物皆物件,大體分為兩種 普通物件,函式物件。凡是通過new function 建立的都是函式物件,其他的則為普通物件。下面舉例說明 function fun1 function var fun2 function function var fun3 new func...

js 原型 原型鏈理解

執行發現如下 自定義乙個函式,函式包含兩個關鍵資料 prototype,proto 1 原型 prototype person具有prototype屬性 包含我們定義的屬性name,age以及constructor,並且constructor指向我們的person函式,可以理解為prototype就...

js原型物件和原型鏈的理解

原型的存在主要是為了解決在例項化時,節省記憶體,可以減少例項化是物件內部的屬性或者方法過多,可以將這些屬性或者方法放在原型上,例項物件在需要這些屬性或者方法時,可以直接呼叫,js會根據原型鏈進行查詢。function protof name,age protof.prototype.showtest...