3

JavaScriptで独自の名前空間を作成中です...

(function(window){
    (function(){
        var myNamespace = {
            somePublicMethod: function(){
            },
            anotherPublicMethod: function(){
            }
        }

        return (window.myNamespace = window.my = myNamespace)
    }());
})(window);

私はこれらの種類の高度な JavaScript 手法に不慣れで、名前空間内からパブリック メソッドを呼び出す最善の方法を見つけようとしています。私のパブリックメソッド内でthisに設定されているようmyNamespaceです。

次のようなパブリックメソッドを呼び出す必要があります...

AnotherPublicMethod: function(){
   this.somePublicMethod()
}

また...

AnotherPublicMethod: function(){
   my.somePublicMethod();
}

違いはありますか?

4

1 に答える 1

3

私の見方では、 を使用するthis場合はオブジェクトへの直接参照を使用していますが、 を使用する場合、インタープリターはのプロパティとしてmy見つかるまでスコープ チェーンをトラバースする必要があります。mywindow

しかし、逆の議論もあるかもしれません。

編集:

は関数の呼び出し方法thisによって決定されるため、Activation オブジェクトがそのオブジェクトである必要があることに注意してください。

したがって、これは機能します:

my.anotherPublicMethod();

しかし、これはそうではありません:

var test = my.anotherPublicMethod;
test();

その可能性がある場合はmy、 、またはオブジェクトへの他の直接参照を使用する必要があります。オブジェクトへの参照を維持することで、スコープ チェーンのトラバーサルを減らすことができます。変数myNamespaceが機能するはずです。


少し話題から外れていますが、あなたのコードはそのままでは機能しないことにも注意してください。

この行:

return (window.myNamespace = window.my = myNamespace)

myNamespace...変数にアクセスできません。

おそらく、あなたはこのようなことをもっと意味していましたか?

(function(window){
    window.myNamespace = window.my = (function(){
        var myNamespace = {
            somePublicMethod: function(){
            },
            anotherPublicMethod: function(){
            }
        }
        return myNamespace;
    }());
})(window);
于 2011-01-05T19:44:25.203 に答える