SOURCE

// arguments 是一个对应于传递给函数的参数的类数组对象
// function a () { return arguments }
// a(1,2,3)

Function.prototype.my_bind = function () {
    var self = this, // 保存原函数
        context = Array.prototype.shift.call(arguments), // 保存需要绑定的this上下文
        // 上一行等价于 context = [].shift.call(arguments);
        args = Array.prototype.push.call(arguments); // 剩余的参数转为数组
    return function () { // 返回一个新函数
        self.apply(context, Array.prototype.concat.call(args, Array.prototype.slice.call(arguments)));
    }
}

function a(m, n, o) {
    console.log(this.name + ' ' + m + ' ' + n + ' ' + o);
}

var b = {
    name: 'kong'
};

let ac = a.my_bind(b, 7, 8); // kong 7 8 9bind(b, 7, 8)(9); // kong 7 8 9
ac(9)



function abc(){
 args = Array.prototype.slice.call(arguments);
 console.log(args)
}
abc(1,23,4,5,61,1,31,2,31,31,23)
console 命令行工具 X clear

                    
>
console