ctv--------代码的学习

util.bind = function (func, context) {

            if (util.isFunction(Function.prototype.bind)) {         // util.isFunction是判断类型是否是函数,
                return Function.prototype.bind.apply(func, Array.prototype.slice.call(arguments, 1));  // Function.prototype.bind是一个函数,绑定func里面的this,apply是对func函数进行调用,后面的Array.prototype.slice.call是对伪数组切割,并将参数
// 传递给func } if (arguments.length < 2 && util.isUndefined(arguments[0])) { //伪数组长度小于2,并且第一个参数由意义,直接返回func本身 return func; } var __method = func, args = Array.prototype.slice.call(arguments, 2); // 对参数的前两个进行切割,留下剩下的 return function () { // 返回一个函数 var a = merge(args, arguments); return __method.apply(context, a); 绑定context,并且向__method,也就是func方法里面传递a }; };

  

merge = function (array, args) {
            array = Array.prototype.slice.call(array, 0);  //保留前面剩下的所有参数,将其变成数组
            return update(array, args);
        };

  

update = function (array, args) {
            var arrayLength = array.length,
                length = args.length;
            while (length--) {    // 对参数的长度进行递减,一直到0,0代表着false
                array[arrayLength + length] = args[length];将所有的参数重新赋值给array,举个例子,原来的arguments是[1,2,3,4],切割后是[3,4],最后变成[3,4,1,2,3,4],也就是上面a的值
            }
            return array;
        };

  

posted @ 2020-09-28 15:07  莫邪曲  阅读(198)  评论(0)    收藏  举报