外部ファイルと名前空間でJavaScriptを使用するベスト プラクティスについていくつか質問があります。
名前空間 MyCompany、グローバル構成要素、個々のページのコード、およびおそらくいくつかの「API」を用意しましょう。
var MyCompany = {};
HTML のグローバル構成 MyCompany.root = "/";
どのアプローチが優れているか
初め
MyCompany.Page = {}; (function(ns} { ns.init = function() { var root = MyCompany.root; ajax(root+"somepage.html"); }; }(MyCompany.Page.Home = MyCompany.Page.Home || {});
そしてhtmlの使用中
<script> $( function() { MyCompany.Page.Home.init(); }); </script>
2 番目 (クラスとしてのページとそのインスタンス)
MyCompany.Page.Home = function() { var root = MyCompany.root; this.init = function() { ajax(root + "somepage.html"); }; };
htmlで
<script> var page = new MyCompany.Page.Home(); $( function() { page.init(); }); </script>
サブモジュールと Mixing API with Page javascript
ホームページにいくつかのレビューがある場合。
MyCompany.Page.Home.Reviews = function() {
this.init = function() {
load_stuff();
}
};
そして今、ページの初期化の使用の中で
MyCompany.Home.Page = function(data) {
var reviews = new MyCompany.Home.Page.Reviews();
this.init = function() {
reviews.init();
};
};
それはトラブルを引き起こす可能性がありますか?
Reviews が MyCompany.Home.Page を拡張していることは明らかですが、MyCompany.Home.Page には Reviews が必要です。
MyCompany.Home.Page.Reviews がロードされた後に MyCompany.Home.Page のインスタンスが作成されても、問題は発生しませんよね? レビューは実際には関数オブジェクトを拡張するので、そうですか?
これは最初の質問への回答に依存すると思います。
それもあり得る
(function(ns) {
ns.init = function() { MyCompany.Page.Home.Reviews.init(); };
})(MyCompany.Page.Home = MyCompany.Page.Home || {} );
(function(ns) {
ns.init = function() { load_stuff(); };
})(MyCompany.Page.Home.Reviews = MyCompany.Page.Home.Reviews || {});
また、どうにかして Page javascript の API を分離する必要がありますか?
そのような
MyCompany.APIS.Maps = function(location) {
/* Private variables */
var _location = location;
/* Private functions */
function search_address(address) { .. do search .. }
/* Public interface */
this.search = search_address;
do some initialization ...
};
全部読んでコメントしてくれる人がいたら嬉しいです。
前もって感謝します。