1.原始寫法
一個(gè)方法或者一個(gè)對(duì)象就是一個(gè)模塊.
function m1() {}
var moudle1 = {
_count : 1
//....
}
簡(jiǎn)單有效.
但壞處也很明顯:
污染了全局變量.無(wú)法保證和其他模塊書寫的代碼命名不沖突.
對(duì)于 moudle1
的患處還有一個(gè),那就是外部可以修改內(nèi)部的私有變量 _count
2.函數(shù)立即執(zhí)行的寫法.
var moudle = (function(){
var _count = 1
var m1 = function() {
_count++
//...
}
return {
m1: m1
}
})()
好處很明顯
- 外部無(wú)法訪問(wèn)和修改內(nèi)部
_count
屬性. - 可以選擇將需要的數(shù)據(jù)暴露給外部使用.
3.放大模式
如果一個(gè)模塊很大,必須分成幾個(gè)部分,或者一個(gè)模塊需要利用另外一個(gè)模塊的功能.
這個(gè)時(shí)候就可以考慮使用放大模式(augmentation)
可以理解成把擴(kuò)展一個(gè)模塊的功能.
var moudle1 = (function(module){
var m1 = function() {
// 需要用到moudle.foo方法
module.foo()
}
// 給 moudle.baz 添加 baz 方法.
moudle.baz = function() {
}
return moudle.
})(moudle)
4.寬放大模式
有時(shí)候,一些模塊都是從網(wǎng)絡(luò)上加載的.可能出現(xiàn)不存在的情況.所以,為了保證模塊的加載不出錯(cuò)誤.可以做一些容錯(cuò)處理.
var moudle1 = (function(moudle){
moudle.foo = function() {
}
return moudle
})(moudle1||{})
5.輸入全局變量
有時(shí)候,一個(gè)模塊的定義需要依賴其他的模塊.
但是模塊內(nèi)部最好不要直接寫這些提供了全局對(duì)象的模塊對(duì)象.
這樣會(huì)造成依賴關(guān)系不明確.
var moudle = (funciton(){
var m1 = function() {
// moudle 依賴了 jquery
jquery.fn()
}
var m2 = function() {
// moudle 依賴了 yahoo
yahoo.fn()
}
return {
m1:m1,
m2:m2
}
})()
如果對(duì)其他模塊有所依賴,建議寫成參數(shù)傳入的形式.
var moudle = (function($,y){
var m1 = function() {
$.fn()
}
var m2 = function() {
y.fn()
}
return {
m1,
m2
}
})(jquery,yahoo)