我有这个类/功能
function Menu()
{
this.closetimer = 0;
this.dropdown = 0;
}
Menu.prototype.menuTimer = function()
{
this.closetimer = setTimeout(function()
{
this.menuClose();
}, this.timeout);
}
Menu.prototype.menuClose = function()
{
if(this.dropdown) this.dropdown.css('visibility','hidden');
}
我想调用属于Menu类的函数menuClose()
,但我认为此代码实际上是尝试从menuClose()
对象调用closetimer
。
如何从menuClose()
menuTimer()
答案 0 :(得分:16)
在setTimeout()
回调中,this
引用window
,只需保留这样的引用:
Menu.prototype.menuTimer = function(){
var self = this;
this.closetimer = setTimeout(function(){
self.menuClose();
}, this.timeout);
}
答案 1 :(得分:6)
另一种方法是绑定内部函数。
<击> 撞击>
<击>Menu.prototype.menuTimer = function(){
this.closetimer = setTimeout(function(){
this.menuClose();
}.bind(this), this.timeout);
}
击> <击> 撞击>
Menu.prototype.menuTimer = function(){
this.closetimer = setTimeout(this.menuClose.bind(this), this.timeout);
}
答案 2 :(得分:4)
您可以在访问菜单时定义对菜单(this)的引用..
Menu.prototype.menuTimer = function(){
var _self = this;
this.closetimer = setTimeout(function(){
_self.menuClose();
}, this.timeout);
}