サイトをディープリンクするためにSWFAddressを使用しています(SWFAddressへのリンク)。私はコードをクラスに分割するのが好きなので、次のようなメイン構造になっています。
function SomeClass() {
// This adds the this.handleChange() function to the
// SWFAddress event listener
this.initializeSWFA = function() {
// SWFAddress variable is instantiated in SWFAddress javascript file
// so I can use it here
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, this.handleChange);
}
// SWFAddress is supposed to call this function
this.handleChange = function(evt) {
// Some code here
}
}
// Instantiate the SomeClass
var someVar = new SomeClass();
someVar.initializeSWFA();
この行はここでは機能しません:
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, this.handleChange);
私はそれを次のように変更してみました:
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, this.handleChange());
また
var self = this;
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, self.handleChange);
そして、これらも機能しません。
では、このような状況でクラスからJavaScript関数を参照するにはどうすればよいですか?
関数handleChange
がクラスの外にある場合は、関数の名前を書くことができます。
まず、すべての回答ありがとうございます。私はまだこれがJavaScriptでどのように機能するかを理解しようとしています。私はここJavaScriptのようなオブジェクト指向モデルには慣れていません。
これが今のところ解決策です。JavaScriptでこれをうまく行う方法をまだ理解できませんが、このソリューションは機能します。ehudokai(ありがとう)が提案した解決策を実装しようとしましたが、うまくいきませんでした。
function SomeClass() {
// This adds the this.handleChange() function to the
// SWFAddress event listener
this.initializeSWFA = function() {
// SWFAddress variable is instantiated in SWFAddress javascript file
// so I can use it here
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, someFunc);
}
// SWFAddress suppose to call this function
this.handleChange= function(evt) {
// Some code here
}
}
// Instantiate the SomeClass
var someVar = new SomeClass();
function someFunc(evt) {
someVar.handleChange(evt);
}
someVar.initializeSWFA();
これには1つの追加関数の定義が含まれるため、これは好きではありません。JavaScriptオブジェクトからSWFAddress EventListenerにメソッドを追加する方法を誰かが理解すると、余分なスペースが必要になります。私を助けてください。