![](/img/trans.png)
[英]Javascript Is it possible to create a prototype Array of particular object?
[英]javascript object with array prototype
最近,我閱讀了一篇包含以下內容的文章
var obj = {};
Array.prototype.push.call(obj, 'aaa', 'bbb', 'ccc');
console.log(obj);
{0: "aaa", 1: "bbb", 2: "ccc", length: 3}
我知道它嘗試使用obj作為上下文,並將其余的作為參數傳遞。 在此之前,我只用於將每個項目壓入數組。 我很好奇此實現背后的邏輯是什么。 如何將index設置為值的每個鍵,以及為什么還會將'length'自動添加到對象? 謝謝
因為這就是push
方式 。 大多數數組方法是有意通用的,因此它們可以應用於其他對象,而不僅是數組。
當使用零個或多個參數item1,item2等調用push方法時,將執行以下步驟:
- 令O為調用ToObject並將
this
值作為參數傳遞的結果。
這只是確保this
是一個對象: var O = Object(this);
- 令lenVal為使用參數“ length”調用O的[[Get]]內部方法的結果。
var lenVal = O.length;
。 在本例中, lenVal
將是undefined
,因為該對象沒有length
屬性。
- 令n為ToUint32 ( lenVal )。
將lenVal
轉換為數字並將結果分配給n
。 undefined
將轉換為0
。
- 讓item為內部List,其元素按從左到右的順序是傳遞給此函數調用的參數。
基本上var items = arguments;
。
- 重復,但項目不為空
- 從項目中刪除第一個元素,並讓E為元素的值。
- 使用參數ToString ( n ), E和
true
調用O的[[Put]]內部方法。- n增加1。
這將簡單地遍歷items
所有條目,分配O[String(n)] = E;
和n += 1
。 這是您傳遞給push的每個參數都分配給該對象的地方!
- 用參數“ length”, n和
true
調用O的[[Put]]內部方法。
將length
設置為n
: O.length = n;
。 這是設置length
地方!
- 返回n 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.