我寫了下面的函數。將本地函數傳遞給setTimeout()
function obj()
{
this.a;
}
obj.prototype.catch = function()
{
alert('Catched')
}
obj.prototype.do = function()
{
alert('called');
}
我需要的是,之後的obj ::做電OBJ ::趕上()()被調用,調用必須從OBJ :: DO(內部進行) 因此,如何通過本地obj的功能的setTimeout
我曾嘗試
obj.prototype.do = function()
{
window.setTimeout('"'+this.catch+'()"',1000);
alert('called');
}
它不工作 然後我試圖
obj.prototype.do = function()
{
window.setTimeout('"'+this+'.catch()"',1000);
alert('called');
}
這給了我下面的錯誤鉻控制檯
Uncaught SyntaxError: Unexpected token ILLEGAL
,所以我嘗試了以下方法髒(是不是真的髒嗎?)
obj.prototype.do = function()
{
this.pid = randomVal(100);
window['temp'+this.pid] = this;
window.setTimeout("temp"+this.pid+".catch();",1000);
alert('called');
}
function randomVal(bound)//returns a random number between 0 and <bound>
{
return (Math.floor(Math.random()*(bound)));
}
這工作。
那麼爲什麼前兩種方法不worked.Is有任何其他的方式做同樣的事情,沒有全局變量.. 第二種方法和最後一個方法幾乎相同。但是爲什麼我在gettng第二種方法的錯誤。 。? 的工作代碼可以在這裏找到 http://jsfiddle.net/jXhAs/
當我們可以在'do'函數中創建一個本地作用域變量時,不需要引入* another *匿名函數。 – Quentin 2012-04-17 14:58:34
@Quentin:有趣的是,這正是Neals的例子(如果你想象他的代碼中包含「obj.prototype.do = function(){}」),那麼你會批評他。我想有人正在尋求接受這裏;-) – micha 2012-04-18 15:24:47