function bind(method, context) {
var args = Array.prototype.slice.call(arguments, 2);
return function() {
var a = args.concat(Array.prototype.slice.call(arguments, 0));
return method.apply(context, a);
}
}
function bind(method, context) {
var args = Array.prototype.slice.call(arguments, 2);
return function() {
var a = args.concat(Array.prototype.slice.call(arguments, 0));
return method.apply(context, a);
}
}
跨浏览器绑定仿真
JavaScript 中的函数不会以任何方式与它们的 this 上下文相关联,一方面,这很好 - 这允许您尽可能灵活,借用方法等等。
但另一方面,在某些情况下,上下文可能会丢失。也就是说,我们看似调用了一个对象方法,但实际上它接收到了this = undefined。
作为 bind(func, context) 调用的结果,我们得到一个“包装函数”,它透明地将调用传递给 func,具有相同的参数,但具有固定的上下文上下文。
IE8 和其他浏览器的旧版本的 bind 等效项如下所示:
它是这样工作的(逐行):