Как я могу ссылаться на инкапсулированную функцию javascript из другой инкапсулированной функции? - PullRequest
1 голос
/ 18 февраля 2009

Я новичок в объектно-ориентированном JavaScript. У меня есть метод установки, который я хочу а) проверить, является ли элемент нулевым, и если да, подождите и вызовите себя снова и б) наблюдайте событие нажатия кнопки.

ErrorBox.prototype.setUpErrorBox = function(btnClientID) {
    if (btnClientID == null) {
        setTimeout("setUpErrorBox()", 1000)
        return;
    }
    Event.observe(btnClientID, 'click', setValSummary);
}

Я получаю сообщения об ошибках, которые setUpErrorBox и setValSummary не существуют (что они не делают). Как я могу ссылаться на них? Я пробовал this.setValSummary, который не работал.

Другими словами, как мне вызвать эквивалент метода класса из другого метода того же класса в javascript?

1 Ответ

2 голосов
/ 18 февраля 2009

Используйте замыкания для удержания контекста выполнения:

ErrorBox.prototype.setUpErrorBox = function(btnClientID) 
{
   var box = this; // object context reference
   if (btnClientID == null) 
   {
      // use closure as event handler to maintain context
      setTimeout(function() { box.setUpErrorBox() }, 1000)
      return;
   }
   // again, use closure as event handler to maintain context
   Event.observe(btnClientID, 'click', function() { box.setValSummary() });
}

См. Также: Область обратного вызова JavaScript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...