我创建了一个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()
只能在这种情况下起作用。
感谢您的帮助
答案 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的错误 - 。