Как получить доступ к методу родительского объекта замыкания? - PullRequest
2 голосов
/ 14 июня 2010

Я определил класс с именем MyClass и для него я определил два метода myMethod1 и myMethod2:

function MyClass() {}
MyClass.prototype.myMethod1 = function() {...};
MyClass.prototype.myMethod2 = function() {...};

Внутри myMethod1 я использую jQuery, и там определено закрытие обратного вызова:

MyClass.prototype.myMethod2 = function() {
 $.jQuery({success: function(data) {
  this.myMethod2();
 }, ...});
}

Теперь проблема в том, что this больше не ссылается на MyClass. Вопрос в том, как я могу к нему обратиться? На данный момент я присвоил ее переменной с именем thisObj и получил к ней доступ следующим образом:

MyClass.prototype.myMethod2 = function() {
 var thisObj = this;
 $.jQuery({success: function(data) {
  thisObj.myMethod2();
 }, ...});
}

Есть ли лучший способ получить доступ к MyClass.this из замыкания, вложенного в myMethod2?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 14 июня 2010

Вы можете передать ссылку на это функции, но ваше решение мне подходит. Вы просто используете лексические правила определения содержания Javascript, так что не так?

1 голос
/ 14 июня 2010

Метод, который вы использовали, часто называют «той ссылкой», потому что имя that обычно используется как имя для копии ссылки this. См. Выступления Крокфорда о JavaScript, например.

1 голос
/ 14 июня 2010

Ваше решение отлично. Поскольку у вас уже есть закрытие, и вы можете использовать его, это совершенно нормально.

Но если хотите, вы можете вместо этого использовать jQuery.proxy, например:

MyClass.prototype.myMethod2 = function() {

    $.jQuery({success: jQuery.proxy(function(data) {
        this.myMethod2();
    }, this), ...});
}

Опять же, нет ничего плохого в вашем первоначальном решении. Использование proxy может быть полезным, однако, когда вы хотите повторно использовать функцию во многих разных местах, или когда у вас еще нет замыкания и вы не хотите его вводить (возможно, потому, что оно будет закрываться слишком много несвязанных вещей). Хорошая вещь о proxy заключается в том, что он создает замыкание над контролируемым набором вещей, а не над текущей областью действия.

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