javascript - 为什么 Array.prototype.slice(arguments, 2) 而不是初始化为空数组?

标签 javascript fabricjs

我正在尝试通过阅读 Fabric.js 的源代码来学习 Javascript。

在文件 util/lang_array.js 中,有一个如下所示的方法:

    var slice = Array.prototype.slice;

    function invoke(array, method) {
        var args = slice.call(arguments, 2), result = [ ];

        for (var i = 0, len = array.length; i < len; i++) {
            result[i] = args.length ? array[i][method].apply(array[i], args) : array[i][method].call(array[i]);
        }
        return result;
    }

我不理解语句 var args = slice.call(arguments, 2)。让我困惑的特定部分是将 2 作为第二个参数传递(考虑 arguments[array, method] 然后是 arguments[2 ] 应为 null)。我查阅了 JS 引用资料,得出的结论是它基本上将 args 初始化为一个空数组。

那为什么不简单地var args = []呢?

谢谢。

最佳答案

这一行用于获取提供给函数的任何额外参数。

然后,这些额外的参数将传递给 .apply 调用中的指定方法。

注意:JS检查函数的形式参数。省略的参数将是未定义,额外的参数将(大部分)被忽略,但可以通过arguments伪数组获得。

我不确定为什么代码要费心检查 args.length 以查看是否调用 .apply.call - 它看起来像过早优化。

关于javascript - 为什么 Array.prototype.slice(arguments, 2) 而不是初始化为空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13141594/

相关文章:

html - 如何缩小图像以适合 Canvas 而不扭曲图像?

javascript - 如何使用 fabric.js lib 缩小 Canvas 以仅显示图像的中心部分?

javascript - 日历不显示

Javascript悬停功能出现

JavaScript 计算两个输入中的错误百分比

javascript - 如何在 Canvas 中显示组和非组形状的尺寸

javascript - 如何对网格织物进行编号

java - 浏览器窗口顶部的 HTC Android (4.0.3) 为空(空白)

javascript - 有条件地使第二次 axios 调用基于第一个发生

javascript - 如何在fabricjs中停止或暂停动画