簡體   English   中英

為什么在Array.prototype.splice中調用ArraySpeciesCreate?

[英]Why ArraySpeciesCreate is called in Array.prototype.splice?

ES6提到ArraySpeciesCreate在步驟12中在Array.prototype.splice中調用,后者根據原始數組創建一個新數組。 為什么需要調用ArraySpeciesCreate來創建原始數組的副本? Array.prototype.splice是否在原始數組中直接運行,如下所示?

var a = [1, 2, 3];
a.splice(0, 1); // a is [2, 3] after this statement

為什么需要調用ArraySpeciesCreate來創建原始數組的副本?

不會創建原始數組的副本(下面更多)。

Array.prototype.splice是否直接在原始數組中運行?

是。

splice有兩件事:

  1. 它修改你調用它的數組,和

  2. 它會創建一個包含您刪除的任何條目的數組

由於#2使用了ArraySpeciesCreate ,因此使用子類數組,您將獲得子類的實例:

 class CustomArray extends Array { } let main = new CustomArray("a", "b", "c", "d"); let deleted = main.splice(1, 2); // Remove and return b and c console.log("main", main); // ["a", "d"] console.log("deleted", deleted); // ["b", "c"] console.log(deleted instanceof CustomArray); // true 

注意我們從splice返回的數組是一個CustomArray的實例。 這是因為您在問題中標記了ArraySpeciesCreate 從規范中ArraySpeciesCreate的描述:

帶有參數originalArraylength的抽象操作ArraySpeciesCreate用於指定使用從originalArray派生的構造函數創建新的Array對象。

注意到最后一點。 基本上, ArraySpeciesCreate使用原始數組的constructor屬性來構建新數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM