我對使用JavaScript的在外部文件和命名空間最佳實踐幾個問題。的頁面和對象的JavaScript外部代碼 - 最佳實踐
讓我們有一個命名空間MyCompany,全局配置的東西,代碼爲單個頁面,也許一些「API」。在HTML MyCompany.root = 「/」
var MyCompany = {};
全局配置;
哪種方法更好
首先
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>
二(頁作爲一個類及其實例)
在HTMLMyCompany.Page.Home = function() { var root = MyCompany.root; this.init = function() { ajax(root + "somepage.html"); }; };
<script> var page = new MyCompany.Page.Home(); $(function() { page.init(); }); </script>
子模和與頁中的JavaScript
如果我們的首頁有一些評論混合API。
MyCompany.Page.Home.Reviews = function() {
this.init = function() {
load_stuff();
}
};
現在內頁的init使用
MyCompany.Home.Page = function(data) {
var reviews = new MyCompany.Home.Page.Reviews();
this.init = function() {
reviews.init();
};
};
莫非肇事?
很明顯,評論擴展了MyCompany.Home.Page,但MyCompany.Home.Page需要評論。
如果MyCompany.Home.Page上的實例是在MyCompany.Home.Page.Reviews加載後創建的,那麼不應該引起麻煩,對嗎?因爲評論實際上會擴展功能對象,是嗎?
我想這取決於第一個問題的答案。
它也可能是
(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 || {});
也應我有點單獨的頁面的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 ...
};
如果有人讀它都留下一些評論,我會很高興。
預先感謝您。
似乎你可以使用適當的模塊,認爲CommonJS或AMD。 – elclanrs