使用apply调用函数

实现函数 calllt,调用之后满足如下条件
1.返回的结果为调用fn之后的结果
2.fn的调用为calllt的第一个参数之后的全部参数

方法1

使用es6

      function calllt(...param){
            param.shift(0);
            return fn.apply(this, param);
        }

      function fn(...param){
            console.log(param);
            return 1;
        }

      calllt('asd', 'sddd','ssssssss');

  方法2

循环出一个新数组

        function calllt(){  
            var arr = arguments;
            var newarr = [];
            for(var i = 0;i < arr.length;i++){
                newarr.push(arr[i]);
            }
            return fn.apply(this, newarr);
        }  

        function fn(){
            console.log(arguments);
            return 1;
        }

        var back = calllt('sdd', 'sddd');
        console.log(back);  

  

  方法3 

使用 

Array.prototype.slice 拷贝成一个新数组
       function calllt(){  
            var arr = Array.prototype.slice.call(arguments, 0);
            arr.shift();
            return fn.apply(this, arr);
        }  
        
        function fn(){
            return 1;
        }

        var back = calllt('sdd', 'sddd','aaaaaaaaa');

  

原文地址:https://www.cnblogs.com/chenyi4/p/11540769.html