欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

apply小结

程序员文章站 2022-05-31 22:09:09
...

我需要使用apply吗?什么时候用?
下面是lodash.js里面一个节流函数的内部实现。可以看到当你使用某些高阶函数的时候,对于传入的参数无法确定时,此刻apply方法可以帮助你,当然你也可以采用es6新的展开语法去实现。

var throttle = function (fn, interval) {
            var _self = fn;
            var _interval = interval;
            var _timer;
            var firstTime = true;
            return function () {
                var args = arguments,
                    __me = this;
                if (firstTime) {
                    //为什么我不直接使用fn()?,因为这个方法会接受参数event事件对象,所以要用apply的方式传递参数
                    //fn();
                    _self.apply(this, args);
                    //_self(...args);
                    return firstTime = false;
                }
                if (_timer) {
                    return false;
                }
                _timer = setTimeout(() => {
                    clearInterval(_timer);
                    _timer = null;
                    _self.apply(null, args);
                }, _interval || 500);
            }
        }
        window.onresize = throttle(updateDate, 500);
        function updateDate(e) {
            console.log(arguments);
        };

这只是其中一个用法,当然你还可以用他来干别的事,比如借用某些对象的方法:

const numbers = [5, 6, 2, 3, 7];

const max = Math.max.apply(null, numbers);

最重要的一点apply会把你传入的第二个对象展开。

相关标签: apply