javaScript - 关于模块的简单笔记

1.原始写法

一个方法或者一个对象就是一个模块.


function m1() {}
var moudle1 = {
 _count : 1
//....
}

简单有效.

但坏处也很明显:

污染了全局变量.无法保证和其他模块书写的代码命名不冲突.

对于 moudle1 的患处还有一个,那就是外部可以修改内部的私有变量 _count

2.函数立即执行的写法.

var moudle = (function(){
    var _count = 1
    var m1 = function() {
        _count++
        //...
    }
    
    return {
        m1: m1
    }
})()

好处很明显

  • 外部无法访问和修改内部 _count 属性.
  • 可以选择将需要的数据暴露给外部使用.

3.放大模式

如果一个模块很大,必须分成几个部分,或者一个模块需要利用另外一个模块的功能.
这个时候就可以考虑使用放大模式(augmentation)

可以理解成把扩展一个模块的功能.

var moudle1 = (function(module){
    var m1 = function() {
        // 需要用到moudle.foo方法
        module.foo()
    }
        
    // 给 moudle.baz 添加 baz 方法.
    moudle.baz = function() {
        
    }
    
    return moudle.
    
})(moudle)

4.宽放大模式

有时候,一些模块都是从网络上加载的.可能出现不存在的情况.所以,为了保证模块的加载不出错误.可以做一些容错处理.

var moudle1 = (function(moudle){
    moudle.foo = function() {
    
    }
    
    return moudle
})(moudle1||{})

5.输入全局变量

有时候,一个模块的定义需要依赖其他的模块.

但是模块内部最好不要直接写这些提供了全局对象的模块对象.

这样会造成依赖关系不明确.

var moudle = (funciton(){
    var m1 = function() {
    // moudle 依赖了 jquery
        jquery.fn()
    }
    var m2 = function() {
        // moudle 依赖了 yahoo
        yahoo.fn()
    }
    
    return {
        m1:m1,
        m2:m2
    }
})()

如果对其他模块有所依赖,建议写成参数传入的形式.

var moudle = (function($,y){
    var m1 = function() {
        $.fn()
    }
    var m2 = function() {
        y.fn()
    }
    return {
        m1,
        m2
    }
})(jquery,yahoo)

你可能感兴趣的:(javaScript - 关于模块的简单笔记)