0

我创建了一个javascript类,我想每秒调用一个方法,这是我的代码:

var MyClass = Base.extend({
    myMethod: function() {
        setTimeout(function(){
            var mc = new MyClass();
            mc.myMethod();
        }, 1000);
    }
});
var myGlobalClass = new MyClass();

myGlobalClass.myMethod();

new MyClass()实际上这段代码有效,但我每次都需要做一个。
我本来希望使用myGlobalClass.

这可能吗 ?

如果您考虑到这一点,那么在这种情况下,仅精度this.myMethod()是行不通的。

谢谢你的帮助

4

4 回答 4

3

如果要引用该值,myGlobalClass则可以直接从函数中进行

setTimeout(function(){
  myGlobalClass.myMethod();
}, 1000);

这是因为 Javascript 在解析名称时不只是查找当前范围内定义的本地变量。它还会查看所有父范围以解决它们。在这种情况下myGlobalClass是在全局范围内定义的。名称解析从setTimeout函数回调开始,它不会在函数中找到它,然后它会搜索myMethod: function() {并且不会在那里找到它,然后它会在全局范围内查找并发现myGlobalClass。它将名称解析为此值

于 2012-07-10T14:59:27.677 回答
2

而不是使用setTimeout递归调用方法。您可以使用setInterval,这使您的代码更清晰。

    var MyClass = Base.extend({
        myMethod: function() {
           //..
        }
    });
   var myGlobalClass = new MyClass();
   setInterval(myGlobalClass.myMethod, 1000);
于 2012-07-10T15:04:33.073 回答
1

如果你想每秒重复一个动作,你有没有想过使用setInterval代替setTimeout?然后myMethod不必在每次调用时都初始化超时。

你可以这样做:

var MyClass = Base.extend({
    myMethod: function() {
        // do stuff here
    }
});

var myGlobalClass = new MyClass();

setInterval(myGlobalClass.myMethod, 1000);
于 2012-07-10T15:03:05.007 回答
0

如果您有多个实例,请为函数命名并递归调用它。

myMethod: function myMethod() {
    setTimeout(function(){
        myMethod();
    }, 1000);
}

这是 IE8- 上的错误。

于 2012-07-10T15:01:20.310 回答