码迷,mamicode.com
首页 > 其他好文 > 详细

模块模式

时间:2015-09-01 00:15:04      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

模块模式:

  • 在 JavaScript 中,Module模块用于模拟类的概念,使一个单独的对象拥有共有/私有方法和变量,从而屏蔽来自全局作用域的特殊部分。(产生的结果是:函数名与在页面上其他脚步定义的函数冲突的可能性降低)

涉及:

  1. 对象字面量

  2. 闭包

  3. 作用域

实现的方法:

  1. 对象字面量表示法;

  2. Module 模式;

  3. AMD 模式;

  4. CommonJS 模式;

  5. ECMAScript Harmony 模块。

优点:

  1. 提供一个包装混合公有/私有方法和变量的方式,防止其泄露至全局作用域,与其他接口发生冲突;

  2. 只有我们的模块才能享有拥有私有函数的自由,因为它们不会暴露于页面的其余部分(只会暴露于我们输出的API),我们认为它们是真正的私有;

  3. 鉴于函数往往已声明并命名,在试图找到有哪些函数抛出异常时,这将使得在调试器中显示调用堆栈变得更容易;

  4. 根据环境,可以让我们返回不同的函数;

缺点:

  1. 访问公有和私有成员的方式不同,在想改变可见性时,必须要修改每一个曾经使用过该成员的地方;

  2. 无法为私有成员创建自动化单元测试

  3. bug需要修正补丁时增加额外的复杂性

  4. 无法轻易扩展私有方法

代码例子:

  • 基本用法:

    技术分享

  • 上面的代码声明了一个全局变量blogModule,并且带有2个可访问的属性:blogModule.AddTopicblogModule.Name,除此之外,其它代码都在匿名函数的闭包里保持着私有状态。

一句话总结:

  • 大臣进入皇帝的宫殿,都得太监先通报皇帝,得到允许,大臣才能进入宫殿,但宫殿里面的东西一概不可以动,得通过太监进行操作。(不太符合,待补充)





模块模式

标签:

原文地址:http://my.oschina.net/Karon/blog/499817

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!