Javascript,范围问题... javascript没有很好的经验

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:{}">&nbsp;</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'功能,当然,当我尝试它时它不起作用.

有任何想法吗?还需要进一步细化吗?

dav*_*vin 5

您的代码在范围方面很好.就像你想要的那样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个参数).
  • 发布更多代码.