0

Reactive Framework をテストしようとしている JS のオブジェクトがあります イベント サブスクリプションで、サブスクリプションが定義されているエンクロージング クラスのインスタンス メソッドを次のように呼び出したいと思います。

function MyClass()
{
    var DoSomething = function(a,b) { ... }

    var InstanceVariable = 1;

    this.uiEvent = uiDiv.jqueryUiWidget("widget")
        .toObservable("change")
        .Subscribe(
                function (event)
                {
                    // Want to call the instance method in the enclosing class
                    DoSomething(1,2);
                });

    this.uiEvent2 = uiDiv.jqueryUiWidget("widget")
        .toObservable("change")
        .Subscribe(
                function (event)
                {
                    // Want to use the instance variable within here
                    alert(InstanceVariable);  
                });
}

これを行うにはどうすればよいですか (「この」スコープはサブスクリプションのスコープであるため)。何らかの方法でサブスクリプションを設定するときに、関数/変数を渡す必要がありますか?

これを行おうとすると、すべてのブラウザーで、インスタンス変数またはメソッドが存在しないというエラーが表示されます。インスタンス メンバーを呼び出したい関数のスコープ内の「this」は、オブザーバーを参照しているため、 OnNext、OnCompleted などの機能

どうもありがとう、

ポール

4

1 に答える 1

1

あなたのコードはうまくいくはずです。問題がある場合は、それらを説明することをお勧めします。ただし、それがどのように機能するかを知りたい場合は、クロージャーについて知っておく必要があります。ウィキペディアから:

コンピューター サイエンスでは、クロージャはレキシカル環境でバインドされた自由変数を持つ第一級の関数です。そのような関数は、その自由変数に「閉じられている」と言われます。クロージャーはその自由変数のスコープ内で定義され、それらの変数の範囲は少なくともクロージャー自体の存続期間と同じです。クロージャーの明示的な使用は、関数型プログラミングや、ML や Lisp などの言語に関連付けられています。クロージャーは、継続渡しスタイルを実装するために使用され、この方法で状態を非表示にします。したがって、オブジェクトや制御構造などの構造は、クロージャーを使用して実装できます。

これは、DoSomethingInstanceVariableが定義されているスコープ内で定義されている任意のメソッドからアクセスできることを意味します。MyClassコンストラクターが呼び出されるたびに、これらの変数の新しい「インスタンス」が作成されます。

于 2010-12-14T16:27:30.470 に答える