JavaScript 模組化程式設計簡單介紹
雖然JavaScript已經成為一種模組化程式語言,但是由於瀏覽器相容性問題,所以在很多專案還是要使用非內建模組化程式設計最佳實踐,下面首先介紹一下ES2015之前是如何實現模組化程式設計。
ES2015新增模組功能可以參閱JavaScript Module 模組一章節。
一.原始寫法:
模組就是實現特定功能的一組方法。
只要把不同的函式(以及記錄狀態的變數)簡單地放在一起,就算是一個模組。
[JavaScript] 純文字檢視 複製程式碼function m1(){ //... } function m2(){ //... }
上面的函式m1()和m2(),組成一個模組。使用的時候,直接呼叫即可。
缺點很明顯:"汙染"全域性變數,無法保證不與其他模組發生變數名衝突,而且模組成員之間看不出直接關係。
二.物件寫法:
為了解決上面的缺點,可以把模組寫成一個物件,所有的模組成員都放到這個物件裡面。
[JavaScript] 純文字檢視 複製程式碼var module1 = new Object({ _count : 0, m1 : function (){ //... }, m2 : function (){ //... } });
上面的函式m1()和m2(),都封裝在module1物件裡。使用的時候,就是呼叫這個物件的屬性。
[JavaScript] 純文字檢視 複製程式碼module1.m1();
但是,這樣的寫法會暴露所有模組成員,內部狀態可以被外部改寫。比如,外部程式碼可以直接改變內部計數器的值。
[JavaScript] 純文字檢視 複製程式碼module1._count = 5;
三.立即執行函式寫法:
使用"立即執行函式"(Immediately-Invoked Function Expression,IIFE),可以達到不暴露私有成員的目的。
[JavaScript] 純文字檢視 複製程式碼var module1 = (function(){ var _count = 0; var m1 = function(){ //... }; var m2 = function(){ //... }; return { m1 : m1, m2 : m2 }; })();
使用上面的寫法,外部程式碼無法讀取內部的_count變數。
[JavaScript] 純文字檢視 複製程式碼console.info(module1._count); //undefined
module1就是Javascript模組的基本寫法。下面,再對這種寫法進行加工。
四.放大模式:
如果一個模組很大,必須分成幾個部分,或者一個模組需要繼承另一個模組,這時就有必要採用"放大模式"(augmentation)。
[JavaScript] 純文字檢視 複製程式碼var module1 = (function (mod){ mod.m3 = function () { //... }; return mod; })(module1);
上面的程式碼為module1模組新增了一個新方法m3(),然後返回新的module1模組。
五.寬放大模式(Loose augmentation):
在瀏覽器環境中,模組的各個部分通常都是從網上獲取的,有時無法知道哪個部分會先載入。如果採用上一節的寫法,第一個執行的部分有可能載入一個不存在空物件,這時就要採用"寬放大模式"。
[JavaScript] 純文字檢視 複製程式碼var module1 = ( function (mod){ //... return mod; })(window.module1 || {});
與"放大模式"相比,"寬放大模式"就是"立即執行函式"的引數可以是空物件。
六.輸入全域性變數:
獨立性是模組的重要特點,模組內部最好不與程式的其他部分直接互動。
為了在模組內部呼叫全域性變數,必須顯式地將其他變數輸入模組。
[JavaScript] 純文字檢視 複製程式碼var module1 = (function ($, YAHOO) { //... })(jQuery, YAHOO);
上面的module1模組需要使用jQuery庫和YUI庫,就把這兩個庫(其實是兩個模組)當作引數輸入module1。這樣做除了保證模組的獨立性,還使得模組之間的依賴關係變得明顯。
相關文章
- javascript如何實現模組程式設計簡單介紹JavaScript程式設計
- javascript物件導向程式設計概念簡單介紹JavaScript物件程式設計
- javascript函數語言程式設計簡單介紹JavaScript函數程式設計
- javascript程式碼效能優化簡單介紹JavaScript優化
- javascript設計模式單例模式簡單介紹JavaScript設計模式單例
- 簡述JavaScript模組化程式設計(二)JavaScript程式設計
- javascript模組化簡介JavaScript
- JavaScript 簡單介紹JavaScript
- javascript物件導向程式設計關於封裝簡單介紹JavaScript物件程式設計封裝
- js DSL超程式設計簡單介紹JS程式設計
- Linux 程式設計工具簡單介紹Linux程式設計
- javascript類式繼承設計模式簡單介紹JavaScript繼承設計模式
- javascript 模組化程式設計JavaScript程式設計
- javascript程式碼規範簡單介紹JavaScript
- 簡單介紹克隆 JavaScriptJavaScript
- javascript物件簡單介紹JavaScript物件
- javascript this指向簡單介紹JavaScript
- javascript加密簡單介紹JavaScript加密
- javascript事件控制程式碼簡單介紹JavaScript事件
- 如何除錯javascript程式碼簡單介紹除錯JavaScript
- 簡單介紹python process模組Python
- python shutil模組簡單介紹Python
- 簡單介紹JavaScript閉包JavaScript
- JavaScript希爾排序簡單介紹JavaScript排序
- javascript constructor簡單介紹JavaScriptStruct
- javascript建立物件簡單介紹JavaScript物件
- javascript的this用法簡單介紹JavaScript
- javascript arguments用法簡單介紹JavaScript
- javascript 變數簡單介紹JavaScript變數
- javascript簡單模板引擎介紹JavaScript
- javascript作用域簡單介紹JavaScript
- 使XML程式設計更簡單---JDOM介紹及程式設計指南 (轉)XML程式設計
- JavaScript模組化程式設計規範JavaScript程式設計
- JavaScript 模組化程式設計 - Module PatternJavaScript程式設計
- javascript程式碼執行機制簡單介紹JavaScript
- 《程式設計時間簡史系列》JavaScript 模組化的歷史程式程式設計JavaScript
- JavaScript 模組化程式設計(一):模組的寫法JavaScript程式設計
- JavaScript return語句簡單介紹JavaScript