5

javascript で次のように定義されているとします。

com.company.long.namespace = {
    actions: {   
        add: {  
            defaults: {
                url: 'myurl/submit',
            },

            invoke: function () {   
                var submitUrl = this.defaults.url;                          
                com.company.long.namespace.foo.util.server.submit({
                    url: submitUrl,
                    success: function() { }
                });
            },
        }
    }
};

次に、JQuery クリック イベントのコンテキスト内で呼び出します。

$(myElem).click(function() {
    com.company.long.namespace.actions.add.invoke();
});

「this」が jQuery イベント コールバック内で機能する方法のため、このコンテキストから呼び出された場合、 this.defaultsは未定義です。完全な名前空間を定義したり、 jQuery.proxyを使用したりせずに、このスコープ内で「this」を引き続き使用する方法はありますか?

4

2 に答える 2

5

を呼び出すことはできませんadd。これは関数ではありません。

add.invoke関数を呼び出す場合this.defaultは、オブジェクトで定義した既定のオブジェクトですadd。特別なことをする必要はありません。

例: http://jsfiddle.net/p4j4k/

于 2011-05-03T20:13:16.463 に答える
0

選択したコンテキストで関数を呼び出すには、使用できます( function.applyおよびfunction.call.apply(context)に関する詳細情報):

com.company.long.namespace.actions.add.invoke.apply(com.company.long.namespace.foo.util.context);

呼び出し関数内ではthis、コンテキスト オブジェクトが参照されます。
このjsFilldeの例を確認してください

于 2011-05-03T20:30:23.117 に答える