我正在尝试将对象函数的函数指针存储在数组中。但是当我想要访问函数中的对象的另一个属性时,它会给我带来问题。任何人都可以解决这个问题或者让我知道如何工作周围?
function O(){
this.name="hello";
this.f=function(){
alert(this.name);//why does "this" refer to the array arr rather than the object?
};
this.arr=[];
this.arr["x"]=this.f;
}
var d=new O();
d.arr["x"]();
答案 0 :(得分:4)
在这种情况下,this
将引用函数被调用的对象作为(在您的情况下,数组)的方法。您需要在范围内的某处存储对O
函数的引用,例如:
function O(){
var self = this;
this.name="hello";
this.f=function(){
alert(self.name);//why does "this" refer to the array arr rather than the object?
};
this.arr=[];
this.arr["x"]=this.f;
}
var d=new O();
d.arr["x"]();
这是JavaScript中非常常见的模式,并且具有允许函数以相同方式执行的额外好处,无论是通过d.f()
调用还是d.arr["X"]()