2010-08-22 70 views
2

嗨,大家好我有一個函數,它接受this作爲參數 - 'this'引用的dom元素,點擊後應該運行一個函數。問題是我希望這個函數在稍微延遲後被調用,但是通過可變項this不起作用,因爲函數執行時'this'不會引用參數中傳入的對象,而是傳遞給窗口對象。在函數上執行setTimeout的問題 - 將此函數作爲參數傳遞

我該如何做到這一點?

回答

2

你可以捕捉this

var t = this; 
window.setTimeout(function() { 
    // use the t variable here 
}, 2000); 
2

PrototypeJS增加了bind()方法Function.prototype的。此方法允許您將函數和參數綁定到特定對象的上下文。簡單地說,

window.setTimeout((function() { 
    alert(this); 
}).bind(this), 2000); 

最好的部分是,這種方法是目前ECMA-262規範,JavaScript是基於的一部分,本地實現正推出到現代瀏覽器。如果PrototypeJS尚未實現,它將只添加此方法。

我已經在http://jsfiddle.net/rLpbx/上設置了一個示例腳本。

+0

我在這裏得到一個錯誤在螢火蟲 - 我的功能正在執行忽略超時和螢火蟲陳述它的一個無用的settimeoutcall堅持我把代碼報價:( – Ali 2010-08-22 11:22:24

+0

@Ali:這似乎是一個奇怪的錯誤。你的問題與你有的代碼,我會看看它,看看有什麼問題。 – 2010-08-22 12:15:56