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

window.addEventListener('unload', function(e)
{
    MyClass.shutdown();
    window.removeEventListener('unload', /* how to refer to this function? */);
}, false);
19
задан Kobi 12 May 2010 в 05:11
поделиться

4 ответа

Назовите свою функцию.

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);
21
ответ дан 30 November 2019 в 03:43
поделиться

Свойство вызываемого объекта arguments объекта всегда относится к вызываемой функции:

window.addEventListener('unload', function(e)
{
    MyClass.shutdown();
    window.removeEventListener('unload', arguments.callee);
}, false);

См .: MDC: вызываемый

2
ответ дан 30 November 2019 в 03:43
поделиться

Как использовать рекурсию на анонимных функциях

Допустим, у нас есть анонимная функция 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

11
ответ дан 30 November 2019 в 03:43
поделиться

Я этого не пробовал, но как насчет перемещения вызова метода 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 и как вы его используете.

1
ответ дан 30 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: