3

我正在尝试将对象函数的函数指针存储在数组中。但是当我想访问函数中对象的另一个属性时,它给了我问题。有人可以解决这个问题或给我一个解决方法的想法吗?

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"]();
4

1 回答 1

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"]()

于 2013-05-21T04:12:41.123 回答