0

XBL について話すことは、正確には JavaScript について話しているわけではありません。だから私はこれに関連するこの質問を作成します、今は XBL についてです。私はルート JavaScript コードの作成者ではなく、バインディング内のメソッドとイベント ハンドラーの作成者です。

--

場合によっては、thisキーワードが期待するオブジェクトを参照していないことがあります。(最近の例:主なイベントで、私の XBL で)

この種の間違いを避けるための最善のアプローチは何ですか?

今のところ、私は常にgetElementById(または$.fnjQuery から) を使用していますが、それが最善のアプローチであるかどうかはわかりません。

- アップデート

もう少し詳細:

XBL メソッド内で、 Xulファイル (GUI 記述ファイル)で定義された要素に "this" を使用せずにアクセスする唯一の方法は(私が期待する "this" ではない可能性があるため)、getElementById を使用することです。コードは再利用できないので、代替手段を探しています..

4

2 に答える 2

1

他の場所で聞いたことがあるように、問題はthis、特にイベントハンドラーなどについて話している場合、パラメーターが必ずしも最初に考えたオブジェクトではないことです。this私が見つけた最善の方法は、あるオブジェクトを変数としてバインドし、そのバインドを使用して元の関数を呼び出す別の関数を返す小さな関数を作成することです。

このコードを見てください:

var bindFunction = function(self, f) {
  return function() {
    return f.apply(self);
  };
};

var foo = function() {
  alert(this.hello);
};

var bar = { 
  hello: "Hello there"
};

var boundFoo = bindFunction(bar, foo);
boundFoo();

私が持っているのはbindFunction、オブジェクト(と呼ばれる)といくつかの関数を受け取り、オブジェクトを変数としてself適用して渡された関数を呼び出す別の関数を返すという関数です。selfthis

残りのコードは、いくつかのテストコードです。fooアラートを出す関数、メンバーをthis.hello持つbarオブジェクト、およびでバインドするhello方法です。foobar

基本的に、パラメーターを受け入れない関数を使用して、最初の関数が常に正しいthis変数で呼び出されるようにする別の関数を生成しました。イベントハンドラーに最適です。

(申し訳ありませんが、XBLについては何も知らないので、これがお役に立てば幸いです。)

于 2011-01-06T22:25:53.267 に答える
0

最善の答えがない場合は、実装に XBL の代わりに JavaScript ファイルを使用することをお勧めします。Xulrunner のソース コードを見ると、ほとんどのコードがこれを行っているように見えます。

しかし、問題なく動作する方法があれば、XBL を使用したいと思います。

于 2011-01-07T12:31:48.227 に答える