// 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