JQuery Animation Complete Функция: Как восстановить мое "старое это"?

111
12

Я начинаю работу с jQuery, и у меня есть следующая проблема:

function AClass(){
this.attribute = /*something*/
}

AClass.prototype.COMPLETE= function() {
/*FROM HERE I WANT TO ACCESS TO THE ABOVE "this.attribute"!!*/
}

AClass.prototype.doSomething = function() {
$("something").animate(..,..,.., this.COMPLETE);
}

Итак, эта проблема, с которой я столкнулся. Из этой полной функции анимации я хочу получить доступ к значению атрибута класса AClass. Дело в том, что в этом контексте this указывает на анимированный элемент DOM и больше не указывает на объект вызывающего.

спросил(а) 2012-07-21T10:41:00+04:00 8 лет назад
1
Решение
68

Вы можете использовать метод $.proxy() для привязки определенного контекста к вашему $.proxy() вызову. Или, если вас не беспокоят старые браузеры (т.е. IE <9), вы можете использовать метод (JS 1.8.5) .bind(). В основном, где вам нужно поставить yourFunction в качестве обратного вызова:

$.proxy(yourFunction, theRequiredContext)
// or
yourFunction.bind(theRequiredContext)

В контексте вашего примера кода:

function AClass(){
this.attribute = /*something*/
}

AClass.prototype.COMPLETE= function() {
/*FROM HERE I WANT TO ACCESS TO THE ABOVE "this.attribute"!!*/
}

AClass.prototype.doSomething = function() {
$("something").animate(..,..,..,$.proxy(this.COMPLETE, this));
}

Демо: http://jsfiddle.net/P9mbG/

ответил(а) 2012-07-21T18:52:00+04:00 8 лет назад
40

Сохраните ссылку на оригинал в переменной:

function AClass(){
this.attribute = /*something*/
var self = this;

AClass.prototype.COMPLETE= function() {
/* Use: self.attributes */
}

AClass.prototype.doSomething = function() {
$("something").animate(..,..,..,COMPLETE);
}
}

ответил(а) 2012-07-21T11:04:00+04:00 8 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема