当一个函数并非一个对象的方法时,那么他被当做一个函数来调用。
当函数以此模式调用时,this被绑定到全局对象。这是语言设计上的一个错误。倘若语言设计正确,当内部函数被调用时,this应该仍然绑定到外部函数的this变量。这个设计错误的后果是方法不能利用内部函数来帮助他工作,因为内部函数的this被绑定了错误的值,所以不能共享该方法对对象的访问权。幸运的是,有一个很容易的解决方案:如果该犯法定义一个变量并发给他赋值this,那么内部函数就可以听过那个变量访问到this。如下,
//给myObject 增加一个double方法。
myObject.double b=function(){
var that =this ;
var helper =function(){
that.value =add(that.value,that.value);
};
helper(); //以函数的形式调用helper。
};
//以方法的形式调用double
myObject.double();
document.writeln(myObject.getValue);
由于JavaScript函数对this
绑定的错误处理,下面的例子无法得到预期结果:
var obj = {
birth: 1990,
getAge: function () {
var b = this.birth; // 1990
var fn = function () {
return new Date().getFullYear() - this.birth; // this指向window或undefined
};
return fn();
}
};