window.addEventListener('unload', function(e)
{
MyClass.shutdown();
window.removeEventListener('unload', /* how to refer to this function? */);
}, false);
JavaScript. Передача ссылки на эту текущую анонимную функцию.
Ответ 1
Назовите свою функцию.
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);
Ответ 2
Как использовать рекурсию для анонимных функций
Допустим, у нас есть анонимная факториальная функция, и мы хотим сделать это рекурсивно. Как мы называем функцию без имени? В 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
Ответ 3
Свойство callee
объекта arguments
всегда относится к вызываемой функции:
window.addEventListener('unload', function(e)
{
MyClass.shutdown();
window.removeEventListener('unload', arguments.callee);
}, false);
Смотрите: MDC: вызываемый
Ответ 4
Я не пробовал это, но как насчет перемещения метода метода removeEventListener в MyClass. Метод не будет анонимным, но вы не будете загрязнять глобальное пространство имен, и оно будет частью класса, которым он управляет. Вы даже можете сделать это "private". Я не уверен, что такое ваш стиль, но я бы написал его примерно так:
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 и как вы его используете.