一、对象字面值

这种设计模式中,一个对象被描述为一组以逗号分隔的名称/值对括在大括号({})的集合。对象内部的名称可以是字符串或是标记符后跟着一个冒号":"。在对象里最后一个名称/值对不应该以","为结束符,因为这样会导致错误。

例如:var myModel = {

	myProperty : "someValue",
//对象字面值包含了属性和方法,例如我们可以定义一个模块配置进对象里边
myConfig:{
useCache : true,
language : "en"
},
//非常基本的方法
myMethod : function(){
console.log(" this is myMethod");
},
//输出基于当前的配置
myMethod1 :function(){
console.log("Cache is:"+ (this.myConfig.useCache)? "enabled" : "disabled" );
},
//重写当前的配置
myMethod2 : function(newConfig){
if(typeof newConfig == "object"){
this.myConfig = newConfig;
consle.log(this.myConfig.language);
}
}
}
1、myModel.myMethod();
输出:this is myMethod 
2、myModel.myMethod1();
输出:Cache is:enabled
3、myModel.myMethod2({ language: "zh", useCache : false });
 输出: zh

  

二、使用自包含的模块实现了模块模式

这种模式的特点:

  • 可以创建只能被我们模块访问的私有函数。这些函数没有暴露出来(只有一些API是暴露出来的),它们被认为是完全私有的。
  • 当我们在一个调试器中,需要发现哪个函数抛出异常的时候,可以很容易的看到调用栈,因为这些函数是正常声明的并且是命名的函数。
  • 这种模式同样可以让我们在不同的情况下返回不同的函数。

例如:

 var basketModel = ( function(){
var basket = [];
function dosomethingPrivate()
{
}
function dosomethingElsePrivate()
{
}
// Return an object exposed to the public
return{
// Add items to our basket
addItem : funtion(values){
basket.push(values);
},
// Get the count of items in the basket
getItemCount : function(){
return basket.length;
},
dosomething : dosomethingPrivate,
getTotal : function(){
var q = this.getItemCount();
p = 0;
while(q--){
p += this.basket[q].price;
}
return p;
}
};
}()); 使用方法:
basketModule.addItem({ item: "bread", price: 0.5});
basketModule.addItem({ item: "butter", price: 0.3});
//Outputs: 2
console.log( basketModule.getItemCount() );
//Outputs: 0.8
console.log( basketModule.getTotal() );
//undefined
console.log( basketModule.basket );
//undefined
console.log( basket );

三、Import mixins(导入混合)

这个变体展示了如何将全局(例如 jQuery)作为一个参数传入模块的匿名函数。
这种方式允许我们导入全局,并且按照我们的想法在本地为这些全局起一个别名。

 var myModel = (function(JQ,_){
function privateMethod1(){
jQ(".container").html("test");
}
function privateMethod2(){
console.log( _.min([10, 5, 100, 2, 1000]) );
}
return {
publicMethod : function(){
privateMethod1();
}
} }(JQ,_));

四、暴露式模块模式

当我们想要在一个公有方法中调用另外一个公有方法,或者访问公有变量的时候,我们不得不重复主对象的名称。他也不喜欢模块模式中,当想要将某个成员变成公共成员时,修改文字标记的做法。因此在这个模式中,我们可以简单地在私有域中定义我们所有的函数和变量,并且返回一个匿名对象,这个对象包含有一些指针,这些指针指向我们想要暴露出来的私有成员,使这些私有成员公有化。

var myRevealingModule = function () {
var privateCounter = 0;
function privateFunction() {
privateCounter++;
}
function publicFunction() {
publicIncrement();
}
function publicIncrement() {
privateFunction();
}
function publicGetCount(){
return privateCounter;
}
// Reveal public pointers to
// private functions and properties
return {
start: publicFunction,
increment: publicIncrement,
count: publicGetCount
};
}(); myRevealingModule.start();

  

javascript 模块化模式总结(二)的更多相关文章

  1. Javascript模块化编程(二):AMD规范

    Javascript模块化编程(二):AMD规范   作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_d ...

  2. (转)Javascript模块化编程(二):AMD规范

    转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...

  3. 简述JavaScript模块化编程(二)

    前置阅读:简述JavaScript模块化(一) 在前面一文中,我们对前端模块化所经历的三个阶段进行了了解: CommonJs,由于是同步的,所以主要应用于服务器端,以Node.js为代表. AMD,异 ...

  4. Javascript模块化编程(二):AMD规范(转)

    这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要 ...

  5. Javascript模块化编程(二):AMD规范 作者: 阮一峰

    声明:转载自阮一峰的网络日志 这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可 ...

  6. Javascript模块化编程(二):AMD规范【转】

    作者: 阮一峰 日期: 2012年10月30日 这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为 ...

  7. Javascript模块化编程(二):AMD规范(转)

    这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要 ...

  8. (转)Javascript模块化编程(二):AMD规范

    这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要 ...

  9. Javascript模块化编程(二):AMD规范 (转)

    原文作者: 阮一峰 日期: 2012年10月30日 这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? ...

随机推荐

  1. [转]应用服务器ApacheSocketUnixthread

    HttpClient容易忽视的细节——连接关闭 博客分类: java   HttpClient client = new HttpClient(); HttpMethod method = new G ...

  2. MYSQL学习笔记 (六)explain分析查询

    使用EXPLAIN可以模拟优化器执行SQL语句,从而知道MYSQL是如何处理你的SQL,从而分析查询语句或者表结构的瓶颈.

  3. java - 内存泄漏

    内存泄漏问题产生原因 长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场 ...

  4. CentOS下使用KVM克隆虚拟机自动修改网卡的MAC地址

    克隆完虚拟机之后Mac地址还保留着母机的配置,此时需要修改成新的Mac地址才能继续,网上一般都是这样的手动操作: 参考:http://blog.51cto.com/freedyong/1361907 ...

  5. VS2012项目中使用CocoStudio相关文件的设置

    开发环境说明: win7  vs2012  coco2d-x 3.0 alpha1 cocos2d-x 3.0 alpha 1搭配CocoStudio使用,效果更佳.CocoStudio包含了游戏开发 ...

  6. JSoup 用法详解

    清单 1 // 直接从字符串中输入 HTML 文档 String html = "<html><head><title> 开源中国社区 </titl ...

  7. HDU 4671 Backup Plan (2013多校7 1006题 构造)

    Backup Plan Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  8. php中的var_dump()方法的详细说明

    首先看看实例: <?PHP$a = "alsdflasdf;a";$b = var_dump($a);echo "<br>";//var_du ...

  9. set bin 集合

    set: create table rr(zz char(4));create table test5 (rr set('美丽','态度好','温柔','善良'));insert into test5 ...

  10. python笔记23-unittest单元测试之mock

    什么是mock unittest.mock是一个用于在Python中进行单元测试的库,Mock翻译过来就是模拟的意思,顾名思义这个库的主要功能是模拟一些东西. 它的主要功能是使用mock对象替代掉指定 ...