window.addEventListener('unload', function(e)
{
MyClass.shutdown();
window.removeEventListener('unload', /* how to refer to this function? */);
}, false);
Назовите свою функцию.
function f(e) {
MyClass.shutdown();
window.removeEventListener('unload', f);
}
window.addEventListener('unload', f, false);
Править Думаю, это тоже сработает. Хороший момент, Коби!
window.addEventListener('unload', function f(e)
{
MyClass.shutdown();
window.removeEventListener('unload', f);
}, false);
Свойство вызываемого
объекта arguments
объекта всегда относится к вызываемой функции:
window.addEventListener('unload', function(e)
{
MyClass.shutdown();
window.removeEventListener('unload', arguments.callee);
}, false);
См .: MDC: вызываемый
Как использовать рекурсию на анонимных функциях
Допустим, у нас есть анонимная функция factorial, и мы хотим выполнить ее рекурсию. Как вызвать функцию без имени? В Javascript свойство arguments.callee содержит указатель на текущую выполняющуюся функцию, что означает, что анонимная функция действительно может вызывать сама себя.
alert((function(n){ if(n <= 1){return 1;}else{return n*arguments.callee(n-1);}})(10));
источник: http://www.hunlock.com/blogs/Functional_Javascript
Я этого не пробовал, но как насчет перемещения вызова метода removeEventListener в сам MyClass. Метод не будет анонимным, но вы не будете загрязнять глобальное пространство имен, и он будет частью класса, которым он управляет. Вы даже можете сделать его «приватным». Я не уверен, какой у вас стиль, но я бы написал его примерно так:
var MyClass = function(){
var self = this;
self.shutdown = function(){
window.removeEventListener('unload',self.shutdown,false);
};
self.initialize = function() {
window.addEventListener('unload',self.shutdown,false);
};
return self;
};
var myObject = new MyClass();
myObject.initialize();
Думаю, это зависит от того, что делает MyClass и как вы его используете.