Javascript:settimeout问题
当我启动脚本时,我有以下内容:Javascript:settimeout问题,javascript,function,settimeout,Javascript,Function,Settimeout,当我启动脚本时,我有以下内容: var my_great_masterpiece = new function () { var self = this; response_xml: function () { if (self.http_request.readyState == 4) { if (self.http_request.status == 404 &a
var my_great_masterpiece = new function ()
{
var self = this;
response_xml: function ()
{
if (self.http_request.readyState == 4)
{
if (self.http_request.status == 404 && countXmlUrl <= 3)
{
countXmlUrl++;
self.realXmlUrl = xmlUrl[countXmlUrl];
self.request_xml();
}
if (self.http_request.status == 200)
{
self.xmlDoc = self.http_request.responseXML;
self.storage.setItem('domains_raw_xml', self.http_request.responseText);
self.main.peter_save_data();
self.timervar = setTimeout(function ()
{
// ########### Below line gives the error #############################
self.new_version_show_window();
}, 2000);
}
}
},
new_version_show_window: function ()
{
...
}
后来在我的脚本中,我有以下内容:
var my_great_masterpiece = new function ()
{
var self = this;
response_xml: function ()
{
if (self.http_request.readyState == 4)
{
if (self.http_request.status == 404 && countXmlUrl <= 3)
{
countXmlUrl++;
self.realXmlUrl = xmlUrl[countXmlUrl];
self.request_xml();
}
if (self.http_request.status == 200)
{
self.xmlDoc = self.http_request.responseXML;
self.storage.setItem('domains_raw_xml', self.http_request.responseText);
self.main.peter_save_data();
self.timervar = setTimeout(function ()
{
// ########### Below line gives the error #############################
self.new_version_show_window();
}, 2000);
}
}
},
new_version_show_window: function ()
{
...
}
response\u xml:function()
{
if(self.http_request.readyState==4)
{
如果(self.http\u request.status==404&&countXmlUrl代码中不清楚定义了新版本\u show\u window
。也许您可以在self上明确定义它:
self.new_version_show_window = function () {
/* ... */
}
或者您可以在本地命名空间中定义它,并在setTimeout调用中直接使用它:
self.timervar = setTimeout(function () {
new_version_show_window();
}, 2000);
或者简单地说:
self.timervar = setTimeout(new_version_show_window, 2000);
由于,在外部函数中声明的变量在内部函数中也可用
编辑
感谢您发布完整的代码。新版本\u显示\u窗口
是在上定义的。main
,因此您必须访问它:
self.timervar = setTimeout(function () {
self.main.new_version_show_window();
}, 2000);
您的代码不清楚在哪里定义了new\u version\u show\u window
。也许您可以在self上明确定义它:
self.new_version_show_window = function () {
/* ... */
}
或者您可以在本地命名空间中定义它,并在setTimeout调用中直接使用它:
self.timervar = setTimeout(function () {
new_version_show_window();
}, 2000);
或者简单地说:
self.timervar = setTimeout(new_version_show_window, 2000);
由于,在外部函数中声明的变量在内部函数中也可用
编辑
感谢您发布完整的代码。新版本\u显示\u窗口
是在上定义的。main
,因此您必须访问它:
self.timervar = setTimeout(function () {
self.main.new_version_show_window();
}, 2000);
可能是self
在JavaScript[1]中是一个保留字。这可能会给您带来一些问题,因此请尝试从不同的角度来命名变量
[1] 可能是self
在JavaScript[1]中是一个保留字。这可能会给您带来一些问题,因此请尝试从不同的角度命名变量
[1] 这是一个范围问题。新的\u版本\u show\u窗口仅在其调用的构造中的范围内(显然是某种jQuery AJAX函数)。如果您在它现在存在的有限范围之外定义它,它将只对我的杰作可用。这是一个范围问题。新的\u版本\u show\u窗口仅在它被调用的构造中的范围内(显然是某种jQuery AJAX函数)。只有在my_great_杰作
的有限范围之外定义它时,它才可用。您是否尝试过将new_version_show_window
的函数定义移到调用它的位置上方?另外,在new_version_show_window
前面使用分号而不是逗号。第二个如何连接到第一个部件的部件?您是否设置了原型?@josh.trow:不,它似乎是一个对象文字。属性用逗号分隔。@josh.trow-您误解了代码。我看不到语法错误。您必须提供更多信息。我们必须知道新版本\u显示窗口
的位置罚款。现在它可能到处都是……你试过把新版本显示窗口的函数定义移到调用它的地方吗?另外,在新版本显示窗口之前使用分号而不是逗号
第二部分是如何连接到第一部分的?你设置了原型吗?@josh.trow:不,是的eems是一个对象文字。属性用逗号分隔。@josh.trow-您误解了代码。我看不到语法错误。您必须提供更多信息。我们必须知道新版本显示窗口的定义位置。现在它可能无处不在…如果(部分)object literal被用作原型,那么它应该可以工作。但是我们需要更多的信息……是的,你是对的。但是,由于self
关闭了所有函数,它基本上是一个单例,对于原型来说没有什么意义。@Ryan:正如我所说,我们实际上需要完整的代码。没有办法判断你做错了什么因为我们不知道第二部分在哪个范围内。new\u version\u show\u window
是在this.main上定义的,所以您必须调用self.main.new\u version\u show\u window()
成功了!谢谢大家!不知道JS什么时候变得这么复杂了…几年前我曾经处理过一些简单的东西,现在才开始研究它。匿名函数…封装对象…以前从来没有这样做过,现在已经完全失去了。如果不是因为这样,我会大发雷霆的,你们这些很棒的人…谢谢!如果(部分)object literal被用作原型,那么它应该可以工作。但是我们需要更多的信息……是的,你是对的。但是,由于self
关闭了所有函数,它基本上是一个单例,对于原型来说没有什么意义。@Ryan:正如我所说,我们实际上需要完整的代码。没有办法判断你做错了什么因为我们不知道第二部分在哪个范围内。new\u version\u show\u window
是在this.main上定义的,所以您必须调用self.main.new\u version\u show\u window()
奏效了!谢谢大家!不知道JS什么时候变得这么复杂了……几年前我曾经处理过一些简单的东西,现在才开始研究。匿名函数……封装的对象……以前从来没有这样做过,现在已经完全迷失了方向。如果不是因为这样,你们这些了不起的人……谢谢!@Jivings:嗯,我可以告诉你,在浏览器环境中使用它是没有问题的。否则我的很多代码都会被破坏……在函数中定义为局部变量是绝对有可能的。没有其他预定义变量会与之冲突。@Felix-哈哈,好吧,tbh我想我以前也用过它。我只是没看到任何东西否则代码会立即出错。Felix是对的。它可能在这些列表中,但作为局部变量,self
至少不会造成任何问题。我已经多次使用它,但没有任何问题。@Jivings:好吧,我可以告诉你,在浏览器上下文中使用它没有问题。否则我的许多代码都会被破坏……这肯定是可能的o