标签:
模块模式:
在 JavaScript 中,Module模块用于模拟类的概念,使一个单独的对象拥有共有/私有方法和变量,从而屏蔽来自全局作用域的特殊部分。(产生的结果是:函数名与在页面上其他脚步定义的函数冲突的可能性降低)
涉及:
对象字面量;
闭包;
作用域。
实现的方法:
对象字面量表示法;
Module 模式;
AMD 模式;
CommonJS 模式;
ECMAScript Harmony 模块。
优点:
提供一个包装混合公有/私有方法和变量的方式,防止其泄露至全局作用域,与其他接口发生冲突;
只有我们的模块才能享有拥有私有函数的自由,因为它们不会暴露于页面的其余部分(只会暴露于我们输出的API),我们认为它们是真正的私有;
鉴于函数往往已声明并命名,在试图找到有哪些函数抛出异常时,这将使得在调试器中显示调用堆栈变得更容易;
根据环境,可以让我们返回不同的函数;
缺点:
访问公有和私有成员的方式不同,在想改变可见性时,必须要修改每一个曾经使用过该成员的地方;
无法为私有成员创建自动化单元测试;
bug需要修正补丁时会增加额外的复杂性;
无法轻易扩展私有方法。
代码例子:
基本用法:
上面的代码声明了一个全局变量blogModule,并且带有2个可访问的属性:blogModule.AddTopic和blogModule.Name,除此之外,其它代码都在匿名函数的闭包里保持着私有状态。
一句话总结:
大臣进入皇帝的宫殿,都得太监先通报皇帝,得到允许,大臣才能进入宫殿,但宫殿里面的东西一概不可以动,得通过太监进行操作。(不太符合,待补充)
标签:
原文地址:http://my.oschina.net/Karon/blog/499817