在特定范围内调用JavaScript方法

时间:2011-03-02 12:11:16

标签: javascript dojo scope

亲爱的, 我正在使用dojo.declare在JavaScript中创建类。在其中一个方法中,我有一个AJAX请求。在该请求的load方法中,我需要执行某些方法。这些方法实际上是使用dojo.declare创建的类的方法。我尝试使用this执行该方法。但它给了我找不到错误的方法。所以我使用dojo.hitch(this,testMethod)来调用它。它工作正常。现在问题是我在testMethod()内部还有许多其他方法,它们在内部调用我的JavaScript类的其他方法。到处都有dojo.hitch()真的很痛苦。是否有任何解决方法。

    dojo.declare("TestClass",null,{

    getData:function(url){
    dojo.xhrGet({
      url:url,
      load: function (response){
        dojo.hitch(scope of the current object,testMethod(response))    
      },
      error:function(){

      }
    });
    },
    testMethod:function(response){
    //calls testMethod2. I think I can use dojo.hitch(this,testMethod3) to call it.
    //but I wanted to avoid doing it every time.
    },
    testMethod2:function(){
    //calls testMethod3
    },
    testMethod3:function(){
    //can call other methods.
    }
    });

3 个答案:

答案 0 :(得分:2)

似乎执行范围在此代码中丢失了:

load: function (response){
        dojo.hitch(this,testMethod(response))   
      },

我对您的代码做了一些小改动。现在它应该正常工作。

dojo.declare("TestClass",null,{

        getData:function(url){
        dojo.xhrGet({
          url:url,
          load: dojo.hitch(this,this.testMethod),
          error:function(){

          }
        });
        },
        testMethod:function(response){
           this.testMethod2();
        },
        testMethod2:function(){
           this.testMethod3();
        },
        testMethod3:function(){
        //can call other methods.
        }
        });

答案 1 :(得分:2)

这是典型的背景问题。您正在将一个未被占用的函数作为配置哈希的属性传递,该配置哈希作为参数传递给dojo.xhrGet。

dojo.hitch是向函数添加上下文的正确结构。另一种方法是简单地使用一个闭包。你有什么理由不能这样做:

var me = this;
dojo.xhrGet({
    url:url,
    load: function(response) {
        me.testMethod(response);
    }
});

答案 2 :(得分:0)

尝试这样做:

dojo.xhrGet({
   url:url,
   load: dojo.hitch(this, "testMethod"),
   error:function(){

   }
});

您的方式也可以,但它可以节省几个字节,并且只需将方法名称用作字符串即可。 Hitch会自动为你传递参数。