2

thisjavascriptのキーワードで苦労しています。多くの記事と回答を読みましたが、このすべての知識を単純なコードに適用する方法がわかりません。

これが私の「メディエーター」オブジェクトです:

function Mediator() {
        this.registered = {}
    }

    Mediator.prototype = {
        constructor: Mediator,

    register: function (id, e) {
        this.registered[id] = e;
        e.m = this; //<-- here 
    },

    broadcast: function() {...}
}

しかし、登録されたオブジェクトでオンにすると、私はやろうとします

this.m.broadcast("Connected");

私は素晴らしいを手に入れましたUncaught TypeError: cannot call method broadcast on undefined

編集:

後でブロードキャスト メソッドを内部で使用できるように、eオブジェクトがメディエーターの参照を保持するようにしますe。私の問題はe、登録メソッド内で設定した参照が保持されないことです。

編集2:

プロトタイプを使用する代わりに匿名オブジェクトを返すと、次のようになります。

function Mediator() {
    var registered = {}

    return {
        register: function (id, e) {
                      this.registered[id] = e;
                      e.m = this; //<-- here 
                  },

        broadcast: function() {...}
    }
}

このように、m をこれに設定すると問題なく動作し、後で他のオブジェクト内でブロードキャストを呼び出すことができます。多分これは純粋な正解ではないかもしれませんが、より良い答えが見つからない限り...

4

1 に答える 1

0

これで何をしたいのかわからないかthis.e= m;試してみてください。this.m = e;メソッドは次のように呼び出されbroadcast("Connected)ます: これを指定する必要はありません。またはm。あなたがそれを呼んでいるとき。これが少し役立つことを願っています。

于 2013-05-03T17:16:27.607 に答える