我正在尝试将我的JavaScript函数转换为一个dojo类。我在我的一个JS方法中有一个setTimeOut("functionName",2000)
。我如何从类中的一个方法调用它,使用dojo.declare方法。例如,下面是我的自定义类。
dojo.declare("Person",null,{
constructor:function(age,country,name,state){
this.age=age;
this.country=country;
this.name=name;
this.state=state;
},
moveToNewState:function(newState){
this.state=newState;
//I need to call "isStateChanged" method after 2000 ms. How do I do this?
setTimeOut("isStateChanged",2000);
},
isStateChanged:function(){
alert('state is updated');
}
});
var person=new Person(12,"US","Test","TestState");
person.moveToNewState("NewState");
请告诉我如何在2000ms后从moveToNewState
方法调用isStateChanged
方法。
4条答案
按热度按时间5tmbdcev1#
您要寻找的是一种将
this
值 * 绑定 * 到setTimeout
将调用的函数的方法:上面是使用一个 * 闭包 * 来绑定上下文(参见:Dojo可能会提供一个内置函数来生成这些“绑定”回调(Prototype和jQuery都提供)。(**编辑:**确实如此,在peller下面的注解中,他善意地指出了
dojo.hitch
。)有关此一般概念的更多信息,请访问:You must remember
this
wgmfuz8q2#
这与dojo无关,这是纯javascript。您正在寻找的是:
看看the docs on setTimeout。
哦,还有,请不要在你的函数名周围使用引号(因为这会使它成为一个无用的字符串,可能会得到
eval
ed,并会给予一个错误)。hwazgwia3#
你可以简单地调用
setTimeout(this.isStateChanged, 2000)
,它将传递正确的函数引用,这与你直接调用方法的方式没有什么不同。表达式this.isStateChanged
将立即求值。要进行调用,不需要将它 Package 在一个额外的函数中或声明局部变量。要将
this
变量绑定到被调用的函数,可以使用dojo.hitch,它将创建自己的闭包,而不会污染局部变量空间,也不会通过其他引用泄漏。z3yyvxxp4#
您可以使用dojo/_base/lang并使用其hitch方法,如以下代码所示: