setTimeout ('classInstance.doFoo (arg)', 750); не будет работать - PullRequest
1 голос
/ 30 января 2011

Я пытаюсь вызвать метод экземпляра с задержкой 750 мс.Проблема в том, что это не работает.Я читал, что есть какая-то проблема с setInterval и объектами, так что, вероятно, есть и с setTimeout.

Скажите, у меня есть это:

function App()
{
      this.doFoo = function (arg)
      {
          alert("bar");
      }
}

window.app = new App();
setTimeout('app.doFoo(arg)', 750);//doesn't work
app.doFoo(arg); //works

Есть ли обходной путь?Как мне передать экземпляр и функцию в setTimeout?

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Я думаю, что предыдущий ответ нуждается в небольшой настройке. это установка глобальной переменной, которую вы затем вызываете; если вы действительно хотите вызвать экземпляр своего «класса», попробуйте это.

function App(message){
     this.name = 'instance';
     var self = this;
     var x = setTimeout(function(){self.doFoo(message, x);}, 750);
}
App.prototype.name = 'proto';

//creating the function on the prototype is more efficient since it is only created once.  if you do 'this.doFoo = function(){}' it's created for every instance of the function taking more memory.

App.prototype.doFoo = function(arg, timer){
 clearTimeout(timer);
 alert(this.name +' ' + arg)
}

var x = new App("hello world");
//should output ("instance hello world");
2 голосов
/ 30 января 2011

Попробуй так:

function App()
{
    this.doFoo = function (arg) {
        alert(arg);
    }
}

window.app = new App();
window.setTimeout(function() {
    window.app.doFoo('arg');
}, 750);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...