在没有闭包的情况下在setTimeout中执行jQuery成员函数的方法?

我试图沿着这些方向做点什么:

setTimeout($('#element').hide,3000); 

这似乎很简单,但它被“这个”问题瘫痪了。 我想找到一种方法来将实际函数作为参数传递, 而不将其包装在另一个函数中 ,例如我不想这样做:

 setTimeout(function(){$('#element').hide();},3000); 

我尝试过的:

 setTimeout($('#element').hide,3000); setTimeout($('#element').hide.apply(document),3000); /* jQuery docs say that document is the default context */ setTimeout($('#element',document).hide,3000); setTimeout($(document).find('#element').hide,3000); setTimeout($(window).find('#element').hide,3000); setTimeout($.proxy($('#element').hide,document),3000); /* I know this returns a function, which I don't want, but I have tried it */ setTimeout(($('#element').hide()),3000); /* functional expression */ 

我正在寻找解决这个问题的方法,但我不想把它包装在另一个函数中。 代码行越少越好。 我知道为什么这不能按预期工作,但如何在不将其包装在封闭中的情况下修复它?

您可以通过将方法的上下文与元素本身绑定来执行此方法,以便在jquery hide方法中, this将指向jquery对象而不是全局上下文。 您可以使用以下方法创建绑定函

Function.bind

跨浏览器替代方案:

$ .proxy

例如:

 var $elem = $('#element'); setTimeout($elem.hide.bind($elem),3000); 

要么

 setTimeout($.proxy($elem.hide, $elem),3000); 

要么

 setTimeout($.fn.hide.bind($elem),3000); //setTimeout($.proxy($.fn.hide, $elem),3000); 

小提琴