Module模式 - 深入了解Javascript
/*
Modelu模式
优点:效率高,代码少,加载速度快,松耦合允许并行加载,提升下载速度
缺点:初始化时间久一点
*/
//一、基础用法
var calculate = function (eq) {
//私有成员
var eqCtl = document.getElementById(eq);
return {
//暴露公开成员
add: function (x, y) {
var val = x + y;
eqCtl.innerHTML = val;
}
}
}
//使用方式
//缺点:每次调用都要new,copy多份
var calculator = new calculate();
calculator.add(2, 2); //二、匿名闭包 ?闭包用途和场景
(function () {
//--所有变量和fucntion都在此声明,并且作用域也只在这个匿名闭包
//--依然可以访问外部全局对象
}()); //()匿名函数自己执行,不用new //三、引用全局变量
/*
隐式全局变量:无论一个变量是否使用,js会反向遍历作用域链来找到var,如果没找到var,则假定该变量为全局
*/
(function ($, yahoo) {
//这里使用了全局的jQuery和yahoo
}(jQuery, yahoo)); //声明全局变量,module模式
var blogModule = (function () {
var my = {}, privateName = '博客园';
function privateAddToTopic(data) {
//内部处理代码
}
my.Name = privateName;
my.AddTopic = function (data) {
privateAddToTopic(data);
};
return my;
}()); //三、高级用法 易于扩展结构
//扩展添加一个函数
var blogModule = (function (my) {
my.AddTopic = function () { }
return my;
}(blogModule)); //--缺点:必须先声明blogModule
//松耦合扩展,加载顺序不固定,缺点:不一定能用所有属性和函数
var blogModule = (function (my) {
return my;
}(blogModule || {}));
//紧耦合扩展
//重载
var blogModule = (function (my) {
var oldAdd = my.AddTopic;
my.AddTopic = function () {
//重载,依然可以用oldAdd调用旧的方法
}
return my;
}(blogModule));
//克隆和继承
var blogModule = (function (old) {
var my = {},
key;
for (key in old) {
if (old.hasOwnProperty(key)) {
my[key] = old[key];
}
} var oldAdd = old.AddTopic;
my.AddTopic = function () { }
return my;
}(blogModule)); //--非继承,只是同个对象多个引用
//跨文件共享私有对象
var blogModule = (function (my) {
var _private = my._private = my._private || {},
_seal = my._seal = my._seal || function () {
delete my._private;
delete my._seal;
delete my._unseal;
},
_unseal = my._unseal = my._unseal || function () {
my._private = _private;
my._seal = _seal;
my._unseal = _unseal;
}
return my;
}(blogModule || {}));
//子模块
blogModule.CommentSubModule = (function () {
var my = {};
return my;
}());
/*
创建一个立即执行的匿名函数表达式
return一个变量,其中这个变量包含你要暴露的属性
返回这个变量将赋值给counter,而不是外部声明的function自身
*/
var counter = (function () {
var i = 0;
return {
get: function () {
return i;
},
set: function (val) {
i = val;
},
increment: function () {
return ++i;
}
};
}());
//counter是一个待有过个属性的对象
counter.get();
counter.set(3);
counter.increment();
counter.increment();
counter.i;//undefined
i;//引用错误
Module模式 - 深入了解Javascript的更多相关文章
- javascript --- 设计模式之Module模式
基本用法 先看一下最简单的一个实现,代码如下: var Calculator = function(){ // 这里可以声明私有成员 var eqCtrl = document.getElement( ...
- 【JavaScript】设计模式-module模式及其改进
写在前面 编写易于维护的代码,其中最重要的方面就是能够找到代码中重复出现的主题并优化他们,这也是设计模式最有价值的地方 说到这里...... <head first设计模式>里有一篇文章, ...
- javascript闭包(Module模式)的用途和高级使用方式
javascript闭包(Module模式)的用途和高级使用方式 javascript闭包的用途:1. 匿名自执行函数:或者可以理解为,避免污染全局变量2. 缓存:源于闭包的核心特性便是保存状态,应用 ...
- <深入理解JavaScript>学习笔记(3)_全面解析Module模式
简介 Module模式是JavaScript编程中一个非常通用的模式,一般情况下,大家都知道基本用法,本文尝试着给大家更多该模式的高级使用方式. 首先我们来看看Module模式的基本特征: 模块化,可 ...
- 深入理解JavaScript系列(3):全面解析Module模式
简介 Module模式是JavaScript编程中一个非常通用的模式,一般情况下,大家都知道基本用法,本文尝试着给大家更多该模式的高级使用方式. 首先我们来看看Module模式的基本特征: 模块化,可 ...
- 【设计模式】module模式&&Revealing module (揭示)模式
写在前面 <head first设计模式>里有一篇文章,是说使用模式的心智, 1.初学者"心智" :"我要为HELLO WORLD找个模式" 2.中 ...
- 设计模式之module模式及其改进
写在前面 编写易于维护的代码,其中最重要的方面就是能够找到代码中重复出现的主题并优化他们,这也是设计模式最有价值的地方 <head first设计模式>里有一篇文章,是说使用模式的心智, ...
- Module 模式 以及 揭示模式。
---恢复内容开始--- Module模式 : 在传统软件工程中为类提供私有和公有封装的方法. 在js中: Module 模式 使用闭包封装 私有状态和组织. 该模式,返回一个公有的API,而其他的一 ...
- 自调用匿名函数和js的Module模式
编写自调用匿名函数的结构一般如下: :(function( window, undefined ) { // your code })(window); 传入的参数window,和参数列表中的unde ...
随机推荐
- Ubuntu 16.04 Vysor 破解 和黑屏问题解决+ 闪屏问题解决
最新破解更新说明: 参考本人blog: 点我呀 黑屏解决 Vysor使用和黑屏问题 经过了一段时间的艰辛探索,确定是我chrome的PNaCl没有安装,然后又是一段艰辛的Google之后,终于在一个链 ...
- Mysql部分常用类型长度含义
Int:一个Int类型4字节 在sql中长度为1则代表一个Int类型的长度 有符号区分的范围:2147483647~-214 ...
- 十一、Android学习笔记_AsyncQueryHandler的应用
研究AsyncQueryHandler这个类的时候遇到了几个重要的不清楚的知识点 1. Handler与Thread,Looper的关系 2. HandlerThread是干什么用的 3. Threa ...
- JSP之AJAX
伴随着Web开发越来越广泛,越来越多网站开始应用AJAX.事实上,Ajax在Web应用带来的变化,我们已经在不知不觉中体验过了.例如,百度搜索提示,会员注册…… 在传统Web应用模式中,页面中用户的每 ...
- 2014.10.09 Andrew 学习 WPF(刘铁锰) 笔记分享
引言 主要是讲了关于WPF只是表现层的工具. 第一章: XAML : 可扩张应用程序标记语言 Extensible Application Markup Language 什么是XAML? X ...
- linux 线程函数大全
Technorati 标签: Linux thread 索引: 1.创建线程pthread_create 2.等待线程结束pthread_join 3.分离线程pthread_detach 4.创建线 ...
- Android App测试要点
本文主要内容,转载自 http://www.51testing.com/html/04/344504-849373.html, 在这里,主要是整理一下app测试的总体思路,这里的a ...
- Java设计模式之--代理模式学习
1.代理模式定义 为其他对象提供一种代理以控制对这个对象的访问.代理对象起到中介服务,可以去掉功能服务和增加额外的服务. 其实按照官方的说法可能不太好理解,代理模式就好比我们生活中买票,一般情况下我们 ...
- 比较不错的一个ios找茬游戏源码
找茬游戏源码 ,这个是一款非常不错的ios找茬游戏源码,该游戏的兼容性非常好的,并且还可以支持ipad和iphone,UI界面设计得也很漂亮,游戏源码真的是一款非常完美,而且又很完整的一款休闲类的游戏 ...
- wordpress使用video.js与七牛云存储实现无广告视频分享应用
video.js是一款极受欢迎的基于HTML5的开源WEB视频播放器,其充分利用了HTML5的视频支持特性,可以实现全平台的无视频插件播放功能,对于现在流行的手机.PAD等移动智能终端有极佳的应用体验 ...