Function.prototype.bind = function(){
var self = this, // 保存原函数
context = [].shift.call(arguments),// 需要绑定的上下文
args = [].slice.call(arguments); //剩余参数
return function(){
return self.apply(context,[].concat.call(args,[].slice.call(arguments)));
// 执行新的函数的时候, 会把之前传入的context当作新函数体内的this
// 并且组合两次分别传入的参数,作为新函数的参数
}
}
var obj = {
name: 'sven'
};
var func = function(a,b,c,d){
alert(this.name); // 输出: sven
alert([a,b,c,d]) // 输出: [1,2,3,4]
}.bind(obj,1,2);
func(3,4);