javascript - array.fill.call() 在 js 中如何工作?

标签 javascript node.js

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/

相关文章:

javascript - “否则不运行在函数中执行(错误)

node.js - 如何在 Node 中访问 Lambda 中的/tmp 文件夹?

Javascript显示== "none"实际上没有显示

javascript - Jquery clone( ) 函数不适用于 toggleClass( )。试图克隆图像但图像从当前位置移动

javascript - AngularJS : Can Controller request external js on fly?

javascript - 将文件写入文件系统,然后在 Express 中下载

javascript - 使用 Socket.IO 获取 404

javascript - 在动态加载的脚本中访问 google ga var

javascript - Wordpress 上的 jQuery Superfish 菜单不显示

javascript - 为什么我不能引用模块外部的属性集?