1 javascript scope callback this getjson
原谅我的经验不足但是这里有问题,我有两个函数,其中一个调用.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
}
Run Code Online (Sandbox Code Playgroud)
问题出在.getJSON的回调函数中,我想调用myFunction2但我无法调用它...使用'this.myFunction2()'我试图在XHR中访问'myFunction2'请求(这是我通过firebug看到的),并且使用我之前创建的var'self'也不起作用,因为它不在范围内我认为,firebug在回调内部不显示任何变量'self'功能,当然,当我尝试它时它不起作用.
有任何想法吗?还需要进一步细化吗?
您的代码在范围方面很好.就像你想要的那样self在范围和参考范围内this.您的调试器可能不会显示它,因为它不在本地函数范围内,但这并不意味着它将无法正确解析.
更简单的案例可以很容易地证明如下:
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();
Run Code Online (Sandbox Code Playgroud)
"json"参数($.getJSON只有3个参数).| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |