从另一个方法调用方法时使用此方法

时间:2015-08-05 13:55:32

标签: javascript scope this

我有一个对象有几个看起来像这个的方法:

var obj = {
    method1: function(){
        $.get('/echo/json/', this.method2)
    },
    method2: function(){
        var $this = this;
        $.getJSON('/echo/json/', function(){
            $this.method3()
        })
    },
    method3: function(){
    }

}

obj.method1();

当我调用对象的第一个方法时,我收到此错误(http://jsfiddle.net/MicheleC/p2gsn5gm/):

Uncaught TypeError: $this.method3 is not a function

我认为在进入回调之前引用this做了这个工作,但我肯定错过了一些东西。

2 个答案:

答案 0 :(得分:1)

您已成功将this的值从method2传递给JSON回调函数。

问题是thismethod2的值不是您所期望的。

下面:

$.get('/echo/json/', this.method2)

您正在传递method2函数,并且在没有对象上下文的情况下调用它。

您需要保留那里的值。

最简单的方法是使用bind

 $.get('/echo/json/', this.method2.bind(this))

答案 1 :(得分:0)

你需要一个外部引用,否则这将被绑定到处理程序分配给它的任何东西(由我假设的是jQuery' $')

var obj = (function(){ 

   var that = {
     method1: function(){
      $.get('/echo/json/', this.method2)
     },
     method2: function(){
       $.getJSON('/echo/json/', function(){
        that.method3();
       })
     },
     method3: function(){

     }
   };

   /* Fill it out with the methods you want */

   return that;
})();

现在应该按照预期行事