0

私は次のような名前空間内にJavaScriptをカプセル化しようとしています:

MySpace = {

   SomeGlobal : 1,
   A: function () { ... }, 
   B: function () { ....; MySpace.A(); .... },
   C: function () { MySpace.SomeGlobal = 2;.... }
}

ここで、数行のコードの代わりに、数百の関数と約60のグローバルを含む約12K行のJavaScriptがあると想像してください。コードを名前空間に変換する方法はすでに知っていますが、12K行のコードを減らして、あちこちに追加するよりも簡単な方法があるのではないかと思いますMySpace.

これを行うより速い方法があるかどうか私に知らせてください。あなたの提案をありがとう。

4

2 に答える 2

1

名前空間をそのようにまとめるのが好きです。柔軟性は非常に高く、必要に応じて、MySpace名前空間のさまざまなモジュールを別々のラッパーに分けることもできます。それでも、すべての前に何らかの_self.参照を追加する必要がありますが、少なくともこの方法では、必要に応じて名前空間の名前全体を非常にすばやく変更できます。

このメソッドを使用して、最初のモジュールから_self.anotherFunc()を呼び出すこともでき、2番目のモジュールに到達する方法を確認できます。

(function (MySpace, $, undefined) {

    var _self = MySpace; // create a self-reference
    _self.test = function () { 
        alert('we got here!'); 
        _self.anotherFunc(); // testing to see if we can get the 2nd module
    };

    _self = MySpace; // reassign everything just incase

}(window.MySpace = window.MySpace || {}, jQuery));

$(function () { 

    MySpace.test(); // call module 1
    MySpace.callOtherModule(); // call module 2

});

// Here we will create a seperate Module to the MySpace namespace
(function (MySpace, $, undefined) {
    var _self = MySpace; // create a self-reference

    _self.callOtherModule = function () {
        alert('we called the 2nd module!');    
    };

    _self.anotherFunc = function () { 
        alert('We got to anotherFunc from the first module, even by using _self.anotherFunc()!'); 
    };
    _self = MySpace; // reassign everything just incase

}(window.MySpace = window.MySpace || {}, jQuery));​

jsFiddleデモ

于 2012-08-07T15:05:47.143 に答える
0

スコープとして使用するために既存のコードの周りに本文をラップし、functionグローバルからすべてを非表示にします-これにより、プレフィックスをどこにも貼り付けずに内部呼び出しを実行できNamespace.、他の人に見られたくないものをきちんと非表示にし、最小限の変更も必要になります。

その後、すべての人に「エクスポート」する関数を決定し、それらを「名前空間」として使用するオブジェクトのプロパティに割り当てます。

于 2012-08-07T15:22:16.913 に答える