使用apply()vs call(),在这种情况下使用哪一个?

时间:2015-01-07 06:56:00

标签: javascript

查看Leaflet api的代码

我的问题是为什么wrapperFn.apply(context, args);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);
        };
    },

1 个答案:

答案 0 :(得分:1)

Apply需要一个参数数组,对方法链接很有用,javascript相当于调用super。在Java等。

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

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

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

这只是

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

鉴于您有一系列参数,您需要使用apply()