我有一个对象有几个看起来像这个的方法:
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
做了这个工作,但我肯定错过了一些东西。
答案 0 :(得分:1)
您已成功将this
的值从method2
传递给JSON回调函数。
问题是this
中method2
的值不是您所期望的。
下面:
$.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;
})();
现在应该按照预期行事