gpt4 book ai didi

javascript - 为什么在 Array.prototype.splice 中调用 ArraySpeciesCreate?

转载 作者:行者123 更新时间:2023-11-30 11:46:49 25 4
gpt4 key购买 nike

提到 ES6 ArraySpeciesCreateArray.prototype.splice 中调用在第12步,后面根据原数组新建一个数组。为什么需要调用 ArraySpeciesCreate 来创建原始数组的副本? Array.prototype.splice是不是像下面这样直接在原数组中操作?

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

最佳答案

Why ArraySpeciesCreate is required to be called to create a copy of the original array?

不会创建原始数组的副本(详见下文)。

Does Array.prototype.splice operate in the original array directly...?

是的。

splice 做了两件事:

  1. 它修改您调用它的数组,并且

  2. 它会创建一个数组,其中包含您删除的所有条目

ArraySpeciesCreate 是因为 #2 而被使用的,所以对于子类数组,你会得到子类的一个实例:

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 的描述:

The abstract operation ArraySpeciesCreate with arguments originalArray and length is used to specify the creation of a new Array object using a constructor function that is derived from originalArray.

请注意末尾的那个位。基本上,ArraySpeciesCreate 使用原始数组的 constructor 属性来构建新数组。

关于javascript - 为什么在 Array.prototype.splice 中调用 ArraySpeciesCreate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40714155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com