Javascript,范围问题。。。不太熟悉javascript
请原谅我的经验不足,但问题是,我有两个函数,其中一个调用.getJSON,我需要在第一个函数的getJSON回调中调用第二个函数。。我有很多麻烦 下面是正在发生的事情的简化版本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
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
}
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”
只有3个参数)$。getJSON
- 发布更多代码
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”
只有3个参数)$。getJSON
- 发布更多代码
self
不在范围内,您在尝试执行self时会出现错误。某些东西
。可能您的问题是其他东西?如果self
不在范围内,您在尝试执行self时会出现错误。某些东西
。可能您的问题是其他东西?不知道,您所说的“死亡”是什么意思,我强烈怀疑这不是JS的真实情况。不知道,你所说的“死亡”是什么意思,我强烈怀疑这不是JS的真实情况。