Подтвердить что ты не робот

JavaScript. Передача ссылки на эту текущую анонимную функцию.

window.addEventListener('unload', function(e)
{
    MyClass.shutdown();
    window.removeEventListener('unload', /* how to refer to this function? */);
}, false);
4b9b3361

Ответ 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 и как вы его используете.