gpt4 book ai didi

javascript - Array.of 与 "[ ]"。何时使用 Array.of 超过 "[ ]"?

转载 作者:行者123 更新时间:2023-12-03 02:51:27 26 4
gpt4 key购买 nike

当我发现 Array.of 时,我正在阅读一些内容。 .

根据 MDN,

The Array.of() method creates a new Array instance with a variable number of arguments, regardless of number or type of the arguments.

var a = Array.of(1,2,3,4,5);
console.log(a)

但是如果我已经知道这些值,我也可以将它们包装在 [] 中以获得相同的输出。那么,在什么特定场景下我们可以/应该使用 Array.of 呢?与 [] 相比,使用它有什么好处吗?

编辑1:

这个问题的目标是 Array.of 与 [] 之间的区别,而不是 new ArrayArray 之间的区别。的

最佳答案

Array.of() 和 Array()/[] 构造函数之间存在细微差别。通常就像 Array() 一样,Array.of() 中的 this 将是 Array 对象,并且它将使用Array.constructor(即function Array())来构造其结果。

但是,Array.of 可以通过更改其绑定(bind)上下文来表现不同。如果绑定(bind)上下文可以用作构造函数(如果绑定(bind)对象是函数),它将使用该函数进行构造。因此,让我们将 Array.of() 绑定(bind)到一个函数,看看会发生什么。

function Test(n){console.log(n)}
Test.prototype.last = function(){return this[this.length-1]};

var what = Array.of.call(Test, [5,6,7], {a:0,b:1}, 42, null, "this is last");
console.log(JSON.stringify(what,null,2));
console.log(what.last());

因此,我们得到了一个类似数组的东西,可以访问构造函数原型(prototype)中的所有函数方法以及那些

最好记住它是 definition ;

NOTE 2 The of function is an intentionally generic factory method; it does not require that its this value be the Array constructor. Therefore it can be transferred to or inherited by other constructors that may be called with a single numeric argument.

好的,这对于数组子类化来说非常方便。我知道通过涉及 Object.setPrototypeOf()__proto__ 可以实现数组子类化,但它们有点 discouraged operations我们仍然可以借助 Array.of() 完成类似的工作。所以..曾经被认为无用的Array.of()在这里变成了英雄;可能是最有用的数组方法之一。怎么会..?让我们看看...

function SubArr(){}
SubArr.prototype = Object.create(Array.prototype); // make SubArr.prototype's prototype Array.prototype
SubArr.prototype.last = function(){return this[this.length-1]}; // add prototype methods to SubArr

var what = Array.of.call(SubArr, 1, 2, 3, 4, "this is last");
console.log(JSON.stringify(what,null,2));
console.log(what.last());
console.log(what.map(e => e));
console.log(what instanceof Array);
console.log(Array.isArray(what));
console.log(Object.prototype.toString.call(what));

我也尝试过制作 SubArr.prototype.constructor = Array;Array.isArray(what) 仍然导致 false

关于javascript - Array.of 与 "[ ]"。何时使用 Array.of 超过 "[ ]"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39952602/

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