jquery не может вызвать функцию объекта JavaScript в конце анимации - PullRequest
0 голосов
/ 01 апреля 2012

У меня есть объект javascript с небольшим количеством jquery для визуального эффекта.

Я могу получить доступ к этому. что угодно внутри основной функции animate, но я не могу получить к нему доступ. что угодно из функции в конце (когда анимация завершена)

this.myDiv1 = 'myScrollableDiv';
this.myDiv2 = 'myDivToScrollTo';
this.test = 'It works';

$( "#"+this.myDiv1 ).animate({
    scrollTop: $( "#"+this.myDiv2 ).position().top - $( "#"+this.myDiv1 ).position().top
}, 500, function() {
    this.myOtherFunction();
});

this.myOtherFunction = function() {
    alert(this.test);
};

this.myOtherFunction не вызывается, потому что я думаю (this) в строке this.myOtherFunction (); ссылается на текущую анимированную функцию jquery, а не на глобальный объект.

Итак, я попытался создать копию (этого) в качестве стандартного javascript var

var thisCopy = this;

перед функцией animate, затем используйте thisCopy со всеми существующими переменными. Это работает ...

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

Я также пытался объявить myOtherFunction как обычную переменную, затем вызвать myOtherFunction без (), и она вызывает функцию, но все еще не дает мне доступ к объектным переменным.

Как я могу вызвать this.myOtherFunction () после завершения анимации и получения доступа ко всем переменным глобальных объектов?

1 Ответ

0 голосов
/ 01 апреля 2012

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

Кажется, вы обеспокоены тем, что в то время, когда вам нужна переменная thisCopy, исходная this изменилась, и вы застряли со старыми данными.

Что ж, у меня хорошие новости: thisCopy - это мелкая копия объекта, а не независимая переменная. Например:

var foo = { a: 1 };
var bar = foo;
foo.a = 2;
alert( bar.a );  // alerts "2"

Другими словами, безопасно использовать технику var thisCopy = this;.

...