I have this class/function
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');
}
I want to call the function menuClose() which is part of the Menu class, but I think this code actually tries to call menuClose() from the closetimer object.
How do I reference menuClose() from the Menu object from within menuTimer()?
In your setTimeout() callback, this refers to window, just keep a reference like this:
Menu.prototype.menuTimer = function(){
var self = this;
this.closetimer = setTimeout(function(){
self.menuClose();
}, this.timeout);
}
Another way is to bind the inner function.
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);
}
you define a reference to the Menu (this) while you have access to it..
Menu.prototype.menuTimer = function(){
var _self = this;
this.closetimer = setTimeout(function(){
_self.menuClose();
}, this.timeout);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With