let arr = [1, 3, 2, 0]
arr.reverse() //[4,3,2,1]
arr.tostring() //"1,2,3,4"
對於如上**,呼叫arr.reverse()的時候會讓陣列實現逆序排,呼叫arr.tostring()會用字串形式展示陣列內容。那麼問題來了,arr的reverse方法是在**定義的?tostring方法是**定義的?
手繪原型煉圖如上:
我們發現
1、arr本身有乙個屬性length,值是4
2、arr還有乙個屬性叫做_proto__(它是乙個陣列物件)
3、arr_proto__還有很多屬性,包括pop、push、reverse、tostring等等
4、上圖最下面一行,arr__proto__也有乙個__proto__屬性
現在回到我們的問題:arr為什麼會擁有 valueof / reverse/ 這幾個方法?
解答:這跟 __proto__ 有關。
當我們「讀取」 arr.tostring 時,js 引擎會做下面的事情:
1. 看看 arr 物件本身有沒有 tostring 屬性。沒有就走到下一步。
2. 看看 arr.__proto__ 物件有沒有 tostring 屬性,發現 arr.__proto__ 有 tostring 屬性,於是找到了
所以 arr.tostring 實際上就是第 2 步中找到的 arr.__proto__.tostring。
可以想象,
5. 直到找到 tostring 或者 __proto__ 為 null。
上面的過程,就是「讀」屬性的「搜尋過程」。
而這個「搜尋過程」,是連著由 __proto__ 組成的鍊子一直走的。
這個鍊子,就叫做「原型鏈」。
arr取前五個物件 js 什麼是JS原型鏈?
平時常用例如arr.reverser或者arr.tostring等陣列的操作方法,可是這些方法有是 規定的了?為什麼我們可以直接使用呢?這些就是今天要為大家介紹的js原型鏈了。let arr 1,3,2,0 arr.reverse arr.tostring 以上述栗子為例,通過控制台可以檢視arr中...
Freemarker list物件取前幾條資料
專案中用freemarker 做顯示層,可能會遇到取出資料前幾條,通過用freemarker 取資料用 但是這種取法是取出所有的資料.如果我想去第一條資料 第一項的值 現在只想取前5條,該怎麼做?如下 定義n的值為list5的大小 如果n大於6,頁面中可能要求只顯示6條 注 gt,gte,lt,lt...
Mysql取分組後前N個值
表結構如下 create table test group limit row id varchar 33 id int 11 num bigint 11 log varchar 33 insert into test group limit row id id num log values 1 1...