Объявление переменных с помощью ключевого слова this в js - PullRequest
0 голосов
/ 19 февраля 2009

Есть ли разница между этим:

var onClick = function() {

     var image = .....

     $.post("/..../...", null, function(data) { myCallback(data, image); } );
}

и

var onClick = function() {

     this.image = .....

     $.post("/..../...", null, function(data) { myCallback(data, this.image); } );
}

Я использую этот способ, и по какой-то причине любой параметр, который я передаю в myCallback, имеет значение null ??

Если я выведу переменную перед вызовом $ .post с помощью alert, я получу значение, чтобы оно не было нулевым?

Ответы [ 3 ]

1 голос
/ 19 февраля 2009

В то время ....

function(data) { myCallback(data, this.image); }

... будет выполнено (после завершения вызова ajax), контекст выполнения будет изменен. Это будет внутри контекста объекта jQuery. Таким образом, в этот момент этот === jQuery, который, как вы уже видели, не имеет свойства изображения. Отсюда и ошибка.

Кстати, Google для JavaScript закрывает и пытается понять их. Это именно то, в чем ваша проблема.

0 голосов
/ 19 февраля 2009

Если вы хотите, чтобы функция onClick представляла класс (кажется маловероятным), «this» подходит как индикатор этого, так и как средство для представления свойств экземпляра (поскольку var, объявленный в экземпляре класса, будет по сути закрытым) .

Если вы не хотите, чтобы onClick представлял класс, то это неуместно , так как это создает сбивающий с толку сигнал и запутывает контекстный след (независимо от контекста).

0 голосов
/ 19 февраля 2009

Объявление переменной с помощью 'var' будет работать благодаря тому, что вы создаете sol-называется 'closure'. Ключевое слово «this» относится к текущему объекту области действия, который, в зависимости от ситуации, может относиться к функции, объекту окна или любому другому объекту. Эта область наиболее определенно будет другой после запуска метода обратного вызова и, следовательно, не является надежной.

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