Javascript 在setTimeout中执行jQuery成员函数而不关闭的方法?

Javascript 在setTimeout中执行jQuery成员函数而不关闭的方法?,javascript,jquery,this,settimeout,Javascript,Jquery,This,Settimeout,我试着按照这些思路做一些事情: setTimeout($('#element').hide,3000); 这看起来很简单,但它被。我想找到一种方法,只将实际函数作为参数传递,而不将其包装到另一个函数中,例如,我不想这样做: setTimeout(function(){$('#element').hide();},3000); 我所尝试的: setTimeout($('#element').hide,3000); setTimeout($('#element').hide.apply(docu

我试着按照这些思路做一些事情:

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 method
中,该
将指向jquery对象,而不是全局上下文。可以使用以下方法创建绑定函数:

跨浏览器的替代方案:

例:


setTimeout将只接受函数名或匿名函数作为参数,因此我认为这无法按您的意愿完成。你不想使用匿名函数的原因是什么?在你给我们的文章中,他们给出了一个可能的解决方案。“你为什么不试试呢?”埃帕斯卡雷洛说,“这就是我试过的。”。对一行代码进行七次不同的尝试。只需将其包装在匿名函数中(或在
setTimeout
之前定义一个包装函数,并将该函数传递给
setTimeout
)。比任何其他选择都要干净。(虽然如果我必须选择其中一个,它可能是
$.proxy
。但是…只是使用.The.Anonymous.Function.(或者解释为什么不…))很好。如果要重新绑定,可以使用$.fn.hide而不是$elem.hide
setTimeout($.proxy($.fn.hide,$('#element'))
更短。我很喜欢你的小提琴,因为它是一个没有变量的单行程序,但我不明白为什么。
bind()
允许你传递jQuery对象吗?表示第一个参数应该是字符串。@AlexW我没有使用jquery.bind,是的,jquery bind用于附加事件。function.bind的等效项是jquery.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);