javascript有改变函数上下文的能力:原生的实现方式是使用call和apply方法。
在IE9及其以上版本中,新增一个可以改变函数上下午的方法叫bind(IE9以下版本需要用户实现):
示例如下:
var foo = {
name: 'foobar'
}
function f() {
alert(this.name);
}
f();//弹出是window对象的name属性值。分析:如果不使用bind,f()的上下文是window
var f1 = f.bind(foo);
f1();//弹出是foo 对象的name属性值。分析:如果使用bind,f()的上下文是foo
另外,许多JS框架也实现了bind方法,用于改变方法的上下文。比如Oenlayers框架。
、jquery等,注意jquery库中的jQuery.proxy方法改变函数的上下文,这和我们文中提到的bind是等价的
以上测试环境为IE10,chrome,和firefox