2012-04-01 12 views
0

の最後にjavascriptオブジェクトの関数を呼び出すことはできません。jqueryのは、私は視覚効果のためのjQueryのビットを持つjavascriptオブジェクトを持っているアニメーション

私はこれにアクセスすることができます。 はメインのアニメーション機能の中にありますが、私はこれにアクセスできません。ラインthis.myOtherFunction()で、私は(これ)と思うのでthis.myOtherFunctionが呼び出されていない最後の機能からどんな(アニメーションが完了したとき)

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); 
}; 

。グローバルオブジェクトではなく、現在のjqueryアニメート関数を指します。

だから私は、すべての既存のvarとthisCopy使用アニメーション機能の前にはJavaScript VAR

var thisCopy = this; 

、標準として(本)のコピーを作成しようとしています。私は、実際のオブジェクトは、他の機能で使用するためにvarsは更新する必要があるので、これは動作します...

しかし、私は(これ)をコピーする必要はありません。

また、myOtherFunctionを通常の変数として宣言してから、myOtherFunctionを()を呼び出さずに呼び出すと、関数が呼び出されたにもかかわらず、オブジェクト変数にアクセスできなくなりました。

アニメーションが完了した後、私は)this.myOtherFunction(呼び出すことができますどのように

とグローバルオブジェクト変数のすべてにアクセスすることがありますか?

答えて

0

しかし、他の機能で使用するために実際のオブジェクト変数を更新する必要があるため、コピーしたくありません。

あなたが一度あなたが元thisが変更されたthisCopy変数を必要としますが、古いデータで立ち往生していることを懸念しているようです。

私は良いニュースを持っています:thisCopyはオブジェクトの浅いコピーであり、独立変数ではありません。例:

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

つまり、var thisCopy = this;の技術を使用することは安全です。

+0

私はそれがうまくいかないと思っていました。私はまた、thisCopyで新しいvarを作成することは(これ)には及ばないと仮定しましたが、そうしています。あなたの助けをありがとうJuhana – PaulMrG

+0

私は1つのページ(2番目のオブジェクトはコースの別の名前と呼ばれる)で同じオブジェクトの2つを使っていくつかのテストを行いましたが、thisCopyに問題は見つかりませんでした。しかし、ローカルコードを作成するのと同じ方法で作成されているので、後でコードが数百行増えたときに衝突が生じる可能性があり、ページ上にオブジェクトの複数のインスタンスを使用することが懸念されます。私は心配すべきですか? – PaulMrG

関連する問題