在课堂上获取全局变量

时间:2012-07-10 14:56:38

标签: javascript

我创建了一个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 个答案:

答案 0 :(得分:3)

如果你想要使用值myGlobalClass,那么你可以直接从函数

中执行此操作
setTimeout(function(){
  myGlobalClass.myMethod();
}, 1000);

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

如果您想每秒重复一次操作,是否考虑过使用setInterval代替setTimeout?然后myMethod不必在每次通话时初始化超时。

你可以这样做:

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

var myGlobalClass = new MyClass();

setInterval(myGlobalClass.myMethod, 1000);

答案 3 :(得分:0)

如果您有多个实例,请为该函数指定名称并以递归方式调用它。

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

这是IE8的错误 - 。