Javascript:settimeout问题

时间:2011-06-23 18:11:40

标签: 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 && 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 ()
        {
...
}

我得到的错误是:

  

错误:self.new_version_show_window是   不是一个功能

我做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:5)

您的代码中不清楚new_version_show_window的定义。也许你可以在自己明确定义它:

self.new_version_show_window = function () {
    /* ... */
}

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

self.timervar = setTimeout(function () {
    new_version_show_window();
 }, 2000);

或简单地说:

self.timervar = setTimeout(new_version_show_window, 2000);

由于closure,外部函数中声明的变量在内部函数中也可用。

修改

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

self.timervar = setTimeout(function () {
    self.main.new_version_show_window();
 }, 2000);

答案 1 :(得分:0)

可能是self是JavaScript [1]中的保留字。这可能会导致一些问题,所以尝试将变量命名为不同的东西。

[1] http://www.quackit.com/javascript/javascript_reserved_words.cfm

答案 2 :(得分:0)

这是范围问题。 new_version_show_window只在它被调用的构造中的范围内(显然是某种类型的jQuery AJAX函数)。如果您在现有的有限范围之外定义它,my_great_masterpiece将只能使用它。