Javascript:设置超时问题

发布于 2024-11-16 15:52:31 字数 1275 浏览 3 评论 0原文

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

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 是 不是一个函数

我做错了什么?

谢谢!

When I start my script I have this:

var my_great_masterpiece = new function ()
{
        var self = this;

Then later in my script I have 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 ()
        {
...
}

the error that I am getting is:

Error: self.new_version_show_window is
not a function

What am I doing wrong?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

寒江雪… 2024-11-23 15:52:31

从您的代码中不清楚 new_version_show_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);

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

编辑

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

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

It is unclear from your code where new_version_show_window is defined. Maybe you could explicitly define it on self:

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

instead. Or you could define it in the local namespace and use it directly in the setTimeout call:

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

or simply:

self.timervar = setTimeout(new_version_show_window, 2000);

Because of closure, the variables declared in the outer function is also available in the inner function.

Edit

Thanks for posting the entire code. new_version_show_window is defined on this.main, so you must access it thusly:

self.timervar = setTimeout(function () {
    self.main.new_version_show_window();
 }, 2000);
东风软 2024-11-23 15:52:31

self 可能是 JavaScript [1] 中的保留字。这可能会给您带来一些问题,因此请尝试将变量命名为不同的名称。

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

It could be that self is a reserved word in JavaScript [1]. This could be causing you some problems so try naming the variable something different to start with.

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

挽清梦 2024-11-23 15:52:31

这是一个范围问题。 new_version_show_window 仅在调用它的构造的范围内(显然是某种 jQuery AJAX 函数)。仅当您在其当前存在的有限范围之外定义它时,它才可用于 my_great_masterpiece

This is a problem of scope. new_version_show_window is only in scope in the construct in which is it called ( apparently a jQuery AJAX function of some sort). It will only be available to my_great_masterpiece if you define it outside the limited scope in which it now exists.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文