【问题标题】:Using apply() vs call(), which one to use in this case? [duplicate]使用 apply() 与 call(),在这种情况下使用哪一个? [复制]
【发布时间】:2015-03-05 00:34:56
【问题描述】:

查看 Leaflet api 中的代码

我的问题是为什么wrapperFn.apply(context, args);</code> and <code>fn.apply(context, args); 使用apply() 而不是call()

你怎么知道使用哪一个?

因为我不提前知道我的传递函数是否使用数组而感到困惑。

limitExecByInterval: function (fn, time, context) {
    var lock, execOnUnlock;

    return function wrapperFn() {
        var args = arguments;

        if (lock) {
            execOnUnlock = true;
            return;
        }

        lock = true;

        setTimeout(function () {
            lock = false;

            if (execOnUnlock) {
                wrapperFn.apply(context, args);
                execOnUnlock = false;
            }
        }, time);

        fn.apply(context, args);
    };
},

【问题讨论】:

  • 是的,应用使用数组,调用使用列表(逗号分隔变量)。如果我在函数中传递参数列表怎么办。那么我应该使用 call() 吗?

标签: javascript


【解决方案1】:

Apply 接受单个参数数组,对于方法链接很有用,相当于调用 super 的 javascript。在 Java 等中。

function makeNoise() {
   Foo.prototype.makeNoise.apply(this, arguments);
}

调用获取参数列表,在参数仅作为单个变量可用的其他情况下更有用。

fn.call(this, x, y, z);

这只是简写

fn.apply(this, [x, y, z])

假设你有一个参数数组,你需要使用 apply()

【讨论】:

  • 但是如果我的传递函数是否使用数组,我不会提前?这就是为什么我很困惑
  • arguments 是一个内置的魔法变量,它填充了当前函数调用的参数,在您的代码中您之前将其保存为 args。
猜你喜欢
  • 2017-06-14
  • 2020-08-10
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多