2012-04-01 54 views
0

我有一个JavaScript对象,带有一点jQuery的视觉效果。jquery不能在动画结束时调用javascript对象函数

我可以访问此。 不管里面的主动画功能,但是我不能访问这个。 末任何从功能(当动画完成)

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.myOtherFunction();指的是当前的jquery动画函数,而不是全局对象。

所以我试图创造的(本)复印件作为一个标准的JavaScript变种

var thisCopy = this; 

animate函数之前,然后用thisCopy与所有现有增值经销商。这工作...

但是,我不想复制(这),因为我需要更新真正的对象变量用于其他功能。

我也尝试将myOtherFunction声明为普通变量,然后调用myOtherFunction而不使用(),它调用函数但仍然不能访问对象变量。

如何在动画完成后调用this.myOtherFunction()并可以访问所有全局对象变量?

回答

0

但是,我不想复制(这),因为我需要更新真正的对象变量用于其他功能。

看来,您担心的时候,你需要的thisCopy变量原this已发生变化,你坚持旧数据。

嗯,我有个好消息:thisCopy是对象的浅拷贝,不是一个独立变量。例如:

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

换句话说,使用var thisCopy = this;技术是安全的。

+0

我认为这不行,但它确实如此。我还假定在thisCopy中创建一个新的var不会继续(this),但它确实如此。感谢您的帮助Juhana – PaulMrG 2012-04-01 13:40:00

+0

我已经在一个页面上做了一些与2个相同对象的测试(第二个对象叫做当然不同的名称),并且没有发现任何与thisCopy有关的问题。但这是一个问题,因为它的创建方式与创建本地变量的方式相同,以至于当代码增长几百行时,可能会有冲突,并且在页面上使用该对象的多个实例。我应该担心吗? – PaulMrG 2012-04-02 10:23:14