Function.prototype.bind = Function.prototype.bind || function(context) {
var me = this;
var args = Array.prototype.slice.call(arguments, 1);
return function() {
var innerArgs = Array.prototype.slice.call(arguments);
var finalArgs = args.concat(innerArgs);
return me.apply(context, finalArgs);
}
}
//context改变后的this指向
//me中存储的就是本次要执行方法的实例
//finalArgs是最后拼接好的参数数组
因为bind不是立即调用调用它的那个方法实例,所以当一个方法实例调用bind时会返回一个方法,等再次调用返回的方法时才会调用实例方法,起主要作用是改变方法内部的this指向,底层根据apply方法实现的,就要把调用bind时传进来的参数与后来调用返回方法时传进来的参数整合到一个数组中,传递给apply,并把调用bind的实例对象存储下来,为调用apply时做准备