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

Way to execute jQuery member functions inside setTimeout without closure?

本文关键字:方法 函数 setTimeout 执行 jQuery 成员      更新时间:2023-10-13

我正试图沿着以下几条线做一些事情:

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

功能.bind

跨浏览器的替代方案:

$.代理

例如:

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);

Fiddle