Есть ли способ сохранить это в обратном вызове? - PullRequest
0 голосов
/ 14 апреля 2011

Трудно объяснить словами, но вот что я довольно часто вижу в своем коде:

var self_reference;
self_reference = this;

$(selector).bind('event', function() {
  self_reference.someFunction();
});

Есть ли способ написать это без необходимости во временной переменной (здесь self_reference)?

Ответы [ 3 ]

1 голос
/ 14 апреля 2011

Вы можете взглянуть на функцию jQuery proxy .

, например

$.getJSON(url, $.proxy(function()
{
  // this has now got the desired context
}, this));
1 голос
/ 14 апреля 2011
$(selector).bind('event', (function() {
  this.someFunction();
}).bind(this));

Function.prototype.bind является расширением ES5 для работы.

Вы можете использовать _.bind в качестве альтернативы кросс-браузера или использовать $.proxy.

$(selector).bind('event', (_.bind(function() {
  this.someFunction();
}, this));

$(selector).bind('event', ($.proxy(function() {
  this.someFunction();
}, this));
1 голос
/ 14 апреля 2011

Нет, нет.

this зависит от контекста, а this будет другим объектом внутри функции обратного вызова. Если вы не скопируете его куда-нибудь, оно будет потеряно.

...