深入了解 Array.prototype.slice.call(arguments) 的內部工作原理
了解 Array.prototype.slice 的行為。 call(arguments) 需要深入探索,而不僅僅是將參數轉換為真正的陣列的表面使用。
通常,當直接在陣列上呼叫 slice() 時,它會迭代該陣列的元素大批。然而,使用 .call() 和 .apply() 提供了一個獨特的機會,可以在函數中手動定義 this 的值。
對於 Array.prototype.slice.call(arguments),一個數組-like 對象,擁有數字 .length 和索引屬性,被替換為 this。這種替換欺騙了 slice() 假設它正在處理一個真正的數組,從而促進其正常操作。
考慮以下範例,其中使用.call() 將沒有固有數組屬性的普通物件設為this :
var my_object = { '0': 'zero', '1': 'one', '2': 'two', '3': 'three', '4': 'four', length: 5 }; var sliced = Array.prototype.slice.call( my_object, 3 );
值得注意的是,slice() 按預期運行,產生所需的結果:
['three','four'];
當參數物件作為Array 中的this 值傳遞時,適用相同的機制。原型.slice.call(參數)。由於參數具有 .length 屬性和數字索引數組,因此 slice() 的處理方式就像在真實數組上操作一樣,提供一致且可預測的結果。
以上是Array.prototype.slice.call(arguments) 如何將參數轉換為陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!