原谅我的经验不足但是这里有问题,我有两个函数,其中一个调用.getJSON,我需要在第一个函数的getJSON回调中调用第二个函数..我遇到了很多麻烦。
以下是正在进行的简化版本。
MyDialog.Widget.prototype._myFunction1 = function(data) {
var self = this;
var renderEntry = function(tr,booltf) {
$('<a href="javascript:{}"> </a>')
.addClass("iconbutton")
.appendTo(tr.insertCell(0))
.click(function() {
$.getJSON(
"/command/button",
null,
function(data) {
self.myFunction2(); //self isn't in scope?
//this.myFunction2(); //this is actually 'this' for XHR request
},
"json"
);
});
//more code here (including the invoking of renderEntry()
}
MyDialog.Widget.prototype.myFunction2 = function()
{
//Ton of code
}
问题出在.getJSON的回调函数中,我想调用myFunction2但我无法调用它...使用'this.myFunction2()'我试图访问'myFunction2'在XHR请求中(这是我通过firebug看到的),并且使用我之前创建的var'self'也不起作用,因为它不在我认为的范围内,firebug没有显示任何变量'self'时在回调函数中,当然,当我尝试它时,它只是不起作用。
有什么想法吗?还需要进一步阐述吗?
答案 0 :(得分:5)
您的代码在范围方面很好。 self
在范围内并且引用this
就像您想要的那样。您的调试器可能不会显示它,因为它不在 local 函数范围内,但这并不意味着它无法正确解析。
更简单的案例可以很容易地证明如下:
var foo = {
fn: function(){ console.log('Called!'); },
invoker: function(){
var self = this,
local = function(){ setTimeout(function(){
setTimeout(function(){ self.fn(); }, 1000);
}, 1000); };
local();
}
};
foo.invoker();
"json"
参数($.getJSON
只有3个参数)。答案 1 :(得分:-1)
你在哪里调用renderEntry()?这是代码的关键部分。它不知道self,因为在调用renderEntry()函数时它没有被初始化。当你调用_myFunction1时,self被初始化,当函数完成执行时它就会死掉。
您是否意识到您只是初始化 renderEntry函数而不是调用它?