如何在同一个对象中调用原型函数?

时间:2011-05-31 20:51:35

标签: javascript closures

我有以下javascript代码。

var Test = function(){



    $("#"+elementId).click(function(){
        // How to call Test.callbackTest here?
    });

}

Test.prototype.callbackTest = function(){
    //code
}

如果我想在点击事件中调用callbackTest(),我是否必须使用this.callbackTest()?

还是有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

如果你想使用click函数,this.callbackTest()将无法工作,因为它将绑定到window对象而不是你的函数。有很多方法可以做到这一点......一个快速的方法

    var Test = function(){

       var that = this

        $("#"+elementId).click(function(){
            // How to call Test.callbackTest here?
             that.callbackTest();
        });

    }

    Test.prototype.callbackTest = function(){


  //code
}

jquery还提供了proxy解决方案,我建议您查看一下。如果您使用它,您的代码就像

  var Test = function(){

        $.proxy(this.callbackTest,this) // This ensures that wheneven callbackTest is called , 'this' inside callbackTest will be bound to current object , in this case Test 
        $("#"+elementId).click(function(){
            //AND THEN YOU CAN USE THIS here 
             this.callbackTest();
        });

    }

    Test.prototype.callbackTest = function(){


  //code
}

答案 1 :(得分:1)

您可以callbackTest私有:

var Test = function(){
   function callbackTest(){
      //code
   }

   $("#"+elementId).click(callBackTest);
};

否则应该是

var Test = function(){
   var me = this;
   $("#"+elementId).click(function(){
        me.callbackTest();
   });
};