Javascript,范围问题。。。不太熟悉javascript

Javascript,范围问题。。。不太熟悉javascript,javascript,callback,scope,this,getjson,Javascript,Callback,Scope,This,Getjson,请原谅我的经验不足,但问题是,我有两个函数,其中一个调用.getJSON,我需要在第一个函数的getJSON回调中调用第二个函数。。我有很多麻烦 下面是正在发生的事情的简化版本 MyDialog.Widget.prototype._myFunction1 = function(data) { var self = this; var renderEntry = function(tr,booltf) { $('<a href="javascript:{}">&nbs

请原谅我的经验不足,但问题是,我有两个函数,其中一个调用.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
}
MyDialog.Widget.prototype.\u myFunction1=函数(数据){
var self=这个;
var renderEntry=函数(tr,booltf){
$('')
.addClass(“图标按钮”)
.appendTo(tr.insertCell(0))
。单击(函数(){
$.getJSON(
“/command/button”,
无效的
功能(数据){
self.myFunction2();//self不在范围内?
//this.myFunction2();//这实际上是XHR请求的“this”
},
“json”
);
});
//这里有更多代码(包括renderEntry()的调用)
}
MyDialog.Widget.prototype.myFunction2=函数()
{
//大量代码
}
问题出在.getJSON的回调函数中,我想调用myFunction2,但我无法让它调用它…使用'this.myFunction2()'我试图访问XHR请求中的'myFunction2'(这是我通过firebug看到的),使用我以前创建的变量'self'也不起作用,因为它不在我认为的范围内,firebug在回调函数中不显示任何变量'self',当然,当我尝试它时它就不起作用了


有什么想法吗?还需要进一步细化吗?

你在哪里调用renderEntry()?这是代码的关键部分。它不知道self,因为调用renderEntry()函数时它没有初始化。self在调用\u myFunction1时初始化,当函数完成执行时它就死了


您知道您只是在初始化renderEntry函数而没有调用它吗?

您在哪里调用renderEntry()?这是代码的关键部分。它不知道self,因为它在renderEntry()时没有初始化函数已调用。当调用_myFunction1时,会初始化self,当函数完成执行时,self将失效


您是否意识到您只是在初始化renderEntry函数,而没有调用它?

您的代码在作用域方面没有问题。
self
在作用域中,并且引用了
,就像您希望的那样。调试器可能不会显示它,因为它不在本地函数作用域中,但这并不意味着它不会被解析为c正确地说

一个更简单的情况可以很容易地演示如下:

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个参数)
  • 发布更多代码

您的代码在作用域方面很好。
self
在作用域中,并且引用了
,就像您希望的那样。调试器可能不会显示它,因为它不在本地函数作用域中,但这并不意味着它无法正确解析

一个更简单的情况可以很容易地演示如下:

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个参数)
  • 发布更多代码

如果
self
不在范围内,您在尝试执行
self时会出现错误。某些东西
。可能您的问题是其他东西?如果
self
不在范围内,您在尝试执行
self时会出现错误。某些东西
。可能您的问题是其他东西?不知道,您所说的“死亡”是什么意思,我强烈怀疑这不是JS的真实情况。不知道,你所说的“死亡”是什么意思,我强烈怀疑这不是JS的真实情况。