2010-08-22 42 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