Mozilla developer包括以下函数 fill 的示例:
[].fill.call({ length: 3 }, 4); // {0: 4, 1: 4, 2: 4, length: 3}
我不明白你需要 call() 做什么以及它如何到达该输出。
最佳答案
这里是 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
作为值
。其余的就很明显了。
fill
是一个数组函数。为了工作,应该在具有有效 length
属性的对象上调用它。然后 fill
从该对象的 0
循环到 length - 1
,设置该对象的键值属性,其中 key 是该对象的当前索引循环(即上面伪代码中的 i
),value 是我们传递给它的value
。
但是使用call
,我们可以不传递数组,而是传入一个类数组对象,该对象是一个看起来像数组的对象(具有有效的length
属性)。 fill
被欺骗相信我们调用它的对象是一个数组。并对其执行与实际数组相同的操作。
关于javascript - array.fill.call() 在 js 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47684600/