Есть ли лучший способ ссылаться на это в Javascript? - PullRequest
0 голосов
/ 16 сентября 2009

В последнее время я видел и писал много таких методов javascript:

var myObj = {
  dialogOptions: {...},
  init: function() {
    var $this = this;
    var something = $("<div/>").load("...", null, function() {
      $(this).dialog($this.dialogOptions);
    });
  }
}

Теперь, это работает из-за природы замыканий, но ссылка именованной переменной на конкретный уровень области видимости кажется неудобной. Мой вопрос:

Есть ли какой-нибудь оператор javascript, который выполняет var $this = this; во внутренней области видимости? Или, может быть, есть способ обойти иерархию объектов, чтобы получить искомое свойство во внутренней области видимости?

Ответы [ 3 ]

1 голос
/ 16 сентября 2009

Нет определенного способа избежать этого. Тем не менее, некоторые библиотеки предоставляют способ привязки функций к определенным областям - обычно допускается такой синтаксис:

(function() { /* do something */ }).bind(whatever)

В зависимости от вашего вкуса это может быть чище, чем объявление области в отдельной переменной. То, что делает привязка в вышеприведенном контексте, по существу таково:

Function.prototype.bind = function(scope) {
    var thisFunction = this;
    return function() {
        thisFunction.call(scope);
    };
};
1 голос
/ 16 сентября 2009

В этом случае, если myObj является глобальной (или глобально достижимой) переменной, я часто делаю следующее:

var myObj = {
  dialogOptions: {...},
  init: function() {
    var something = $("<div/>").load("...", null, function() {
      $(this).dialog(myObj.dialogOptions);
    });
  }
}
1 голос
/ 16 сентября 2009

Краткий ответ: Нет.

Длинный ответ: «проблема» - это уникальная природа this в языке, где все является объектом. Вы не можете выбирать, когда это означает this this или означает other this.

Это javascript для вас. Вы можете сделать многое, но это не всегда красиво.

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