array.fill.call()在js中是如何工作的?

时间:2017-12-06 22:32:40

标签: javascript node.js

Mozilla developer包含以下功能填充示例:

[].fill.call({ length: 3 }, 4);  // {0: 4, 1: 4, 2: 4, length: 3}

我不明白你需要什么电话()以及如何获得该输出。

2 个答案:

答案 0 :(得分:2)

以下是对fill实现的看法(为了解释)的一瞥:

Array.prototype.fill = function(value) {
    for(var i = 0; i < this.length; i++) {
        this[i] = value;
    }
}

现在,当我们fill.call( { length: 3 }, 4 )时,我们将对象{ length: 3 }传递为this,将4传递为value。其余的很明显。

fill是一个数组函数。为了工作,应该在具有有效length属性的对象上调用它。 fill然后从该对象的0循环到length - 1,在此对象上设置键值属性,其中key是循环的当前索引(即i来自上面的伪代码)和值是我们传递给它的value

但是使用call,我们可以传入一个类似数组的对象,而不是传递一个数组,该对象看起来像一个数组(有一个有效的{{1}属性)。 length被欺骗相信我们称之为的对象是一个数组。对于它来说它和它对真实数组的作用是一样的。

答案 1 :(得分:0)

让我重新编写你的代码

var arr = [1];
arr.fill.call({ length: 3 }, 4); // {0: 4, 1: 4, 2: 4, length: 3}
如果你不使用call,在上面的代码中

,你会看到它返回长度为1的数组

var arr = [1];
arr.fill(4); // {0: 4, length: 1}

您可以看到,使用call函数可以在另一个数组上执行fill函数。 call的第一个参数定义函数作用域(在您的情况下,长度为3的数组),其他参数将传递给函数作为其参数
看看call DOC on MDN