Javascript:settimeout问题

Rya*_*yan 0 javascript function settimeout

当我开始我的脚本时,我有这个:

var my_great_masterpiece = new function ()
{
        var self = this;
Run Code Online (Sandbox Code Playgroud)

然后在我的脚本中我有这个:

        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 ()
        {
...
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

错误:self.new_version_show_window不是函数

我究竟做错了什么?

谢谢!

Mag*_*nar 5

从您的代码中不清楚new_version_show_window定义的位置.也许你可以在self上明确定义它:

self.new_version_show_window = function () {
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

代替.或者您可以在本地命名空间中定义它并直接在setTimeout调用中使用它:

self.timervar = setTimeout(function () {
    new_version_show_window();
 }, 2000);
Run Code Online (Sandbox Code Playgroud)

或者干脆:

self.timervar = setTimeout(new_version_show_window, 2000);
Run Code Online (Sandbox Code Playgroud)

由于闭包,外部函数中声明的变量在内部函数中也可用.

编辑

感谢您发布整个代码.new_version_show_window已定义this.main,因此您必须访问它:

self.timervar = setTimeout(function () {
    self.main.new_version_show_window();
 }, 2000);
Run Code Online (Sandbox Code Playgroud)

  • 那很有效!多谢你们!不知道JS什么时候变得这么复杂......几年前我曾经和一些简单的东西一起工作,我刚回到它.匿名函数......封装的对象......从来没有/曾经有过这样的东西而且很丢失.如果不是为了SO而且你是美好的人,那将是深陷... ...谢谢! (2认同)