在下面的代碼中,檢查首先執行並將this.canClick設置爲false。然後resetClick在this.clickDelay秒後將this.canClick設置爲true。但是,再次調用檢查時不會看到更改。我在兩個函數中都記錄了this.canClick的值:resetClick記錄true,然後檢查同一個變量的記錄爲false。函數中的修改值在另一個函數中看不到
this.resetClick=function(){
this.canClick=true;
};
this.check=function(){
if (isMouseDown&&this.canClick==true){
if (mouse.x>=this.x-this.sizex/2 && mouse.x<=this.x+this.sizex/2 && mouse.y>=this.y-this.sizey/2 && mouse.y<=this.y+this.sizex/2){
this.text=this.callback();
this.canClick=false;
setTimeout(this.resetClick, this.clickDelay);
}
}
};
我不相信這是一個規模問題,因爲兩者是同一個對象的成員函數,並且修改對象的屬性。此外,如果你想知道,這是一個函數,檢查按鈕是否被點擊,並做「反彈」,所以你不會錯誤地點擊兩次相同的按鈕。 編輯:重要的缺失信息:如果我只是調用resetClick,不使用setTimeout,它的工作原理。
你用'setTimeout'運行對象範圍之外調用的方法,所以'this'將僅指在執行該方法時的全局窗口對象(這意味着'this.canClick'實際上是'window.canClick')。使用_closure_在對象內部保留'this'的值。 (做一些研究,如果你不知道這意味着什麼。) – CBroe
謝謝@CBroe。您是否可以提交答案,以便訪問此頁面的人更容易看到解決方案? – rvcam
秒,我想你的意思是毫秒? – shmosel