Javascript 如何让setTimeout在对象中执行方法?
我想有一个下拉菜单关闭后,鼠标事件本身,经过短暂的延迟。但我很难让它工作 考虑对象中的以下方法:(我正在使用jQuery) 这不管用。也就是说,此.message未定义。经过一番挖掘,我明白了原因。:)执行时,setTimeout内的代码无法使用“that”引用 我想知道,解决这类问题的“最佳”方法是什么?如何让一个方法使用setTimeout调用同一对象中的另一个方法,并且仍然可以访问该对象中的属性Javascript 如何让setTimeout在对象中执行方法?,javascript,oop,settimeout,Javascript,Oop,Settimeout,我想有一个下拉菜单关闭后,鼠标事件本身,经过短暂的延迟。但我很难让它工作 考虑对象中的以下方法:(我正在使用jQuery) 这不管用。也就是说,此.message未定义。经过一番挖掘,我明白了原因。:)执行时,setTimeout内的代码无法使用“that”引用 我想知道,解决这类问题的“最佳”方法是什么?如何让一个方法使用setTimeout调用同一对象中的另一个方法,并且仍然可以访问该对象中的属性 提前感谢您的帮助。这里的问题是您正在将closeMenu方法与其对象分离。如果您这样做,您也会
提前感谢您的帮助。这里的问题是您正在将closeMenu方法与其对象分离。如果您这样做,您也会遇到同样的问题:
var closeMenu = myObj.closeMenu; // detaching the method from the object
closeMenu();
像这样分离和调用方法意味着它们不再应用于创建它们的对象。在您的示例中,您正在做几乎相同的事情:
// Setting the first parameter of setTimeout to be the detached closeMenu method
that.timer = setTimeout(that.closeMenu,500);
第一种方法的修复方法是使用调用
或应用
方法:
var closeMenu = myObj.closeMenu; // detaching the method from the object
closeMenu.apply(myObj);
但这对一个定时器来说是行不通的。而是创建一个匿名函数:
that.timer = setTimeout(function () { that.closeMenu(); },500);
还有一点可能值得一提——不要与jQuery的
$(“#选择器”).bind()
相混淆——这是一种在各种博客和一些库中流行了一段时间的方法(Prototype是最著名的),并最终在中实现
我在自己创建的一两个类中使用了类似的方法,因为它只是让事情变得更简单。@Nick:问题中有jQuery。是的,对不起,我忘了提到我正在使用jQuery。@Travis:不用担心。我在ECMAScript第5版中添加了更多关于
bind()
方法的内容,在您发布该评论后大约11秒,可能对您有用:-)FWIW:constructcloseMenu=myObj.closeMenu
在Python中工作(是的:稍后调用时,closeMenu()
调用该对象的方法)。所以我不得不向So咨询如何在JavaScript中实现这一点。
that.timer = setTimeout(function () { that.closeMenu(); },500);
that.timer = setTimeout(that.closeMenu.bind(that),500);