JavaScript--Module模式
//module: Module模式是JavaScript编程中一个非常通用的模式
window.onload = function() {
//1、基本使用:
var MyFn = function() {
var age = 24,sex = "boy";//私有变量
var action = function() {//私有行为
console.log("it man");
};
return {//暴露的公开成员
work : "orderMonkey",
action2 : function() {
console.log("it developer!");
}
}
};
var newMyFn = new MyFn();
console.log(newMyFn.action2());
console.log("===============================");
//基本用法的缺点:每次使用时都要使用new 关键字生成,这样在内存中每次会copy一份,占用内存,使用闭包可以避免内存问题,实现自执行。也可以实现功能的扩展。
//2、模块方法:
var MyFn2 = (function() {
var my = {};//向外返回的对象
var age = 25,name = "assassin";
var action = function() {
console.log("内部私有成员");
};
my.EnglishName = "wanghf";
my.action2 = function() {
console.log("major in JavaScript!");
};//公有代码状态
return my;
/*return my = {//向外返回的对象
work : "It developer",
action2 : function() {
console.log("外部成员变量");
}
}*/
})();
console.log(MyFn2.action2());//调用时避免生成,减小内存占有量
console.log("===============================");
//模块方法全局变量的引入和jQuery设计思路一样采用全局传参
var MyFn3 = (function($) {
//同上
})(jQuery);
//3、模块的扩展:
//对于大型项目测需要对自己的扩展了,基于上述的思想,同样把自己作为参数传值,进行扩展
var MyFn2 = (function(my) {//var不是必写,为了统一。
my.addName = "intelwisd";
my.addAction3 = function() {
console.log("扩展的新方法...");
};
/*var my1 = {
addName : "intelwisd",
addAction3 : function() {
console.log("外部成员变量");
}
};*/ //对象的形式有对象的拷贝之前的会覆盖以前的
return my;
})(MyFn2);
console.log(MyFn2.action2());
console.log("===============================");
//4、松耦合扩展和紧耦合扩展
//松耦合扩展 利用 var MyFn2 = MyFn2 || {};
var MyFn2 = (function(my) {
my.addName1 = "intelwisd1";
my.addAction4 = function() {
console.log("松耦合扩展的新方法...");
};
/*var my = {
addName: "intelwisd111",
addAction3: function () {
console.log("外部成员变量");
}
};*/
return my;
})(MyFn2 || {});
console.log(MyFn2.EnglishName);
console.log(MyFn2.addName1);
console.log(MyFn2.action2());
console.log(MyFn2.addAction4());
//松耦合的优点:确保该对象,在存在的时候直接用,不存在的时候直接赋值为{}
console.log("===============================");
//紧耦合扩展 可以实现重载的功能,但要确保加载顺序
var MyFn2 = (function(my) {
var addAction4 = my.newAddAction4;
my.newAddAction4 = function() {//重载函数,以前的函数可以继续使用
console.log("紧耦合扩展....");
};
return my;
})(MyFn2);
console.log(MyFn2.addAction4());
console.log(MyFn2.newAddAction4());
console.log("===============================");
//5、克隆与继承 (在紧耦合的基础上进行继承,其实该对象的属性对象或function根本没有被复制,只是对同一个对象多了一种引用而已,所以如果老对象去改变它,那克隆以后的对象所拥有的属性或function函数也会被改变。)
var MyFn2 = (function(my) {
var my1 = {}, key;
for (key in my) {
if (my.hasOwnProperty(key)) {
my1[key] = my[key];
}
}
var addAction4 = my1.newAddAction4;
my1.newAddAction4 = function() {//重载函数,以前的函数可以继续使用
console.log("紧耦合扩展2....");
// 克隆以后,进行了重写,当然也可以继续调用以前的
};
return my1;
})(MyFn2);
console.log(MyFn2.addAction4());
console.log(MyFn2.newAddAction4());
console.log("===============================");
//6、跨文件中的私有成员的共享
var MyFn3 = (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;
} (MyFn2 || {}));
//任何文件都可以对他们的局部变量_private设属性,并且设置对其他的文件也立即生效。一旦这个模块加载结束,应用会调用 blogModule._seal()"上锁",这会阻止外部接入内部的_private。如果这个模块需要再次增生,应用的生命周期内,任何文件都可以调用_unseal() ”开锁”,然后再加载新文件。加载后再次调用 _seal()”上锁”。
//子模块共有的成员创建
MyFn2.CommentSubModule = (function () {
var my = {};
// ...
return my;
} ());
//eg:
MyFn3.CommentSubModule = (function () {
var my = {
name : "assassin",
Fn1 : function() {
alert(0);
}
};
// ...
return my;
} ());
}
学习来源Tom大叔javascript--Module
JavaScript--Module模式的更多相关文章
- 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模式 - 深入了解Javascript
/* Modelu模式 优点:效率高,代码少,加载速度快,松耦合允许并行加载,提升下载速度 缺点:初始化时间久一点 */ //一.基础用法 var calculate = function (eq) ...
- (转)深入理解JavaScript 模块模式
深入理解JavaScript 模块模式 (原文)http://www.cnblogs.com/starweb/archive/2013/02/17/2914023.html 英文:http://www ...
- Javascript编程模式(JavaScript Programming Patterns)Part 1.(初级篇)
JavaScript 为网站添加状态,这些状态可能是校验或者更复杂的行为像拖拽终止功能或者是异步的请求webserver (aka Ajax). 在过去的那些年里, JavaScript librar ...
- JavaScript module pattern精髓
JavaScript module pattern精髓 avaScript module pattern是一种常见的javascript编码模式.这种模式本身很好理解,但是有很多高级用法还没有得到大家 ...
- 【设计模式】module模式&&Revealing module (揭示)模式
写在前面 <head first设计模式>里有一篇文章,是说使用模式的心智, 1.初学者"心智" :"我要为HELLO WORLD找个模式" 2.中 ...
随机推荐
- hdu 4324 Triangle LOVE(拓扑判环)
Triangle LOVE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- iOS开发之软键盘使用小技巧
在iOS开发过程中,有时候须要弹出软键盘进行输入,有时候又须要在某些情况下隐藏软键盘,以提高用户体验. 今天有几个关于软键盘的小技巧和大家分享. (1)仅仅弹出数字键盘 有某些需求中,要求用户仅仅能在 ...
- 用motion实现家庭视频监控
需求?当然不是为了艳照.你们这些猥琐的人类! 毕竟家里总会有没人的时候,出门走到半路忘记煤气灶是不是关了,还得回去看看. 在这个科技以人为本的时代,当然应该是拿出智能手机联网看看啦.还有万一有人闯空门 ...
- style="background-image: url(__HOMEPAGE__/views/IMJ2V2/images/banner2.jpg)"
style="background-image: url(__HOMEPAGE__/views/IMJ2V2/images/banner2.jpg)" 一.问题 backgroun ...
- 用iptables抗御SYN Flood攻击
1 引 言 网络安全是各种网络应用面临的一个首要问题.从网络普及的那天开始,网络犯罪就没有停止过,相反有愈演愈烈之势.研究发现,现今的网络攻击以分布式拒绝服务攻击(DDOS)为主 .其 ...
- RedHat Linux 多媒体学习指南 (共 36 部原创视频)
1.为sco unix 添加第二块网卡 [url]http://you.video.sina.com.cn/b/11695632-1443650204.html[/url] 2.为sco unix ...
- css3 列表图片hover左右滚动效果
- OPENCV(4) —— ImgProc
2D图像滤波器基础类BaseFilter:dst(x,y) = F(src(x,y), src(x+1,y)... src(x+wdith-1,y), src(y+1,x)... src(x+widt ...
- oracle之dbms_output
oracle的dbms_output oracle的dbms_output的两个小问题 .如果dbms_output.put_line的内容不能显示,需要在命令行中先敲入set serveroutpu ...
- javaScript 对象学习笔记
javaScript 对象学习笔记 关于对象,这对我们软件工程到学生来说是不陌生的. 因为这个内容是在过年学到,事儿多,断断续续,总感觉有一丝不顺畅,但总结还是要写一下的 JavaScript 对象 ...