Javascript模块模式学习分享

之前一直也有听说和接触到模块模式、这次整理了一下、感觉蛮有收获的、特来分享。

模块模式很基本的一点就是匿名函数的 闭包、通过这点来实现。

 1 //模块模式
 2 
 3 var MODULE = (function(){
 4      /*函数默认是返回this的、但是定义了my对象后、return my; 返回值就变成了my对象、然后赋值给MODULE,它具有了my的所有属性和方法,也拥有了匿名函数里面的私有函数*/
 5     var my = {},
 6         _age;
 7 
 8     /*
 9 
10     //这个是错的、C++里面的思想带过来了
11     my.setAge = function(age){
12         age = age;
13     } 
14 
15     */
16 
17     my.setAge = function(tmp){
18         age = tmp;
19     };
20 
21     my.getAge = function(){
22         console.log(age);
23     };
24 
25     return my;
26 }());
27 
28 
29 MODULE.setAge(2);
30 MODULE.getAge();

下面这种是我以前写的、所以决定略略有点傻

 1 // 模块模式自己的方式
 2 //我也不确定这个叫不叫模块模式、私有成员确实是包起来了、前者是返回的对象、可以直接调用、
 3 //这边返回的是函数、需要new 之后创建一个实例才能使用、所以两者的差距感觉还是有的
 4 //但是从继承方面考虑、前一种方式继承起来可能不是很灵活、而下一种方式可以用到很多 蛮炫的继承方式、
 5 
 6 var MODULE1 = (function(){
 7     var age;
 8 
 9     return function(){
10         this.getAge = function(){
11             console.log(age);
12         }
13         this.setAge = function(tmp){
14             age = tmp;
15         }
16     }
17 }());
18 
19 /*
20 这个是错的
21 MODULE1().setAge(2);
22 MODULE1().getAge();
23 */
24 var a = new MODULE1();
25 a.setAge(3);
26 a.getAge();
1 //模块模式可以很好的利用变量导入、更靠的维护全局变量
2 var b = (function($){
3     // do something  插件开发里面这个貌似经常使用
4 }(jQuery));

 

模块模式的扩展

 1 //模块的扩展
 2 //这一种是我的很挫B的方式  
 3 MODULE.weight = 1;
 4 MODULE.setWeight = function(tmp){
 5     weight = tmp;
 6 };
 7 
 8 MODULE.getWeight = function(){
 9     console.log(weight);
10 };
11 
12 MODULE.setWeight(100);
13 MODULE.getWeight();
14 
15 
16 //这一种感觉很牛逼、确实很牛逼、我的方式比较散乱、他的扩展内容都用一个东西包起来、更加易于维护、值得好好学习
17 
18 var MODULE = (function(my){
19     //这里可以添加噼里啪啦各种内容
20     my.gf = "You";
21     //var gf = "You";
22     my.getGf = function(){
23         //这里写成 console.log(gf) 在Nodejs里面会报错 这应该很好理解、gf的话它调用的是这个匿名函数里面的私有成员、而my.gf是属于my的公有的、gf在闭包里面
24         //如果写成 var gf = “You”  那写成 console.log(gf); 就不会错了、
25         //如果用var gf的话 gf就变成了一个私有成员   用my.gf的话就变成了公有成员、两种方式各自取舍、看个人
26         //所以建议是使用 var gf' 我注释掉的那种方式、不然setGf这种函数毛用
27         console.log(my.gf);
28     };
29     my.setGf = function(tmp){
30         gf = tmp;
31     };
32 
33     // and so on
34     return my;
35 }(MODULE) || {});
36 
37 
38 MODULE.getGf();

//那篇牛文中的紧扩展 类似于继承中的 c.klass = p.prototype

 

保留一个对父对象的引用、在这里面就是保持一个对于原模块的引用

复制和继承方面、采用第一种方式的模块比较疼、因为利用hasProperty()的扩展是基于引用的、改变一者另外一者也会改变

而采用我的那种搓逼的 function new的方式、利用继承不会造成这种影响、这是个优点

var MODULE = (function (my) {var old_moduleMethod = my.moduleMethod;my.moduleMethod = function () {// method override, has access to old through old_moduleMethod...
      //这是原文作者的这段代码、他的old_moduleMethod应该也只能在这里面调用了吧? 等my.moduleMethod被重载完、那个old_moduleMethod就没有意义了...不知道是不是
};return my; }(MODULE));

 

原文作者的那个跨文件的私有状态真的很牛逼、学习了

__seal,__unseal的锁的思想、帅气

1 //子模块就没有讲的必要了、
2 MODULE.xxx = (function(){
3     var you = {};
4 
5     //噼里啪啦
6     return you;
7 }());

 

 

很搓比的过完一遍、有错误的希望看到的多多指正、正在学习之中、

附原文作者牛逼链接http://blog.jobbole.com/40409/

转载于:https://www.cnblogs.com/lizhug/archive/2013/05/31/3110058.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Source Insight基本使用和快捷键

为什么要用Source Insight呢?貌似是因为比完整的IDE要更快一些,比较利于查看大量的代码。 软件的安装很简单,设置好安装目录。 配置好文档路径,当然这个也可以在Options里面改,选Options->Preferences…里面的Folde…

powerquery mysql数据库_window 10 下 --excel | power query 通过 ODBC链接 mysql 数据库

excel链接到mysql的方法有几种,今天主要介绍如何通过ODBC链接odbc是 “开放数据库连接”,你可以通过下载插件使得自己的excel可以连接到不同的数据库。关于版本的选择,就是excel版本obdc版本mysql obdc版本(需要一样)第一步 下载mysql odbc…

table样式

一直以来&#xff0c;css和JS都是软肋&#xff0c;因为需要不得不重新温故。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style type"text/css">table.hover…

MAC和XCODE常用快捷键

摘自&#xff1a;http://www.cnblogs.com/yjmyzz/archive/2011/01/25/1944325.html 1. 文件CMD N: 新文件CMD SHIFT N: 新项目CMD O: 打开CMD S: 保存CMD SHIFT S: 另存为CMD W: 关闭窗口CMD SHIFT W: 关闭文件2. 编辑CMD [: 左缩进CMD ]: 右缩进CMD CTRL LEFT: …

数组与内存控制

注&#xff1a;我已对本文章进行了更新&#xff0c;劳烦移步。 java语言是典型的静态语言&#xff0c;因而&#xff0c;数组也是静态的&#xff0c;即当该数组被初始化之后&#xff0c;该数组的长度是不可变的。java 语言的数组变量是引用类型&#xff0c;什么意思呢&#xff1…

NRedis-Proxy - 高性能中间件服务器

2019独角兽企业重金招聘Python工程师标准>>> 高性能中间件服务器 一、 NRedis-Proxy 介绍 NRedis-Proxy 是一个Redis中间件服务&#xff0c;第一个Java 版本开源Redis中间件&#xff0c;无须修改业务应用程序任何代码与配置&#xff0c;与业务解耦&#xff1b;以Spr…

python图片识别验证码软件_python识别图片验证码

http://robertgawron.blogspot.hk/2010/11/almost-all-sites-use-images-with-text.html图片的识别主要有&#xff0c;去色&#xff0c;减噪&#xff0c;去线&#xff0c;分割&#xff0c;二值化&#xff0c;提取特征码这里比较方便的是使用tesseract1&#xff0c;准备库apt-ge…

POJ_1253胜利的大逃亡

这道题使用BFS做的&#xff0c;刚开始有点不太理解为什么使用队列&#xff0c;一旦遇到可以到达终点的节点就立即返回&#xff0c;找到最短时间&#xff0c;最后明白了&#xff0c;因为在队列里的所有节点一定比队头节点 的时间长。下面是具体代码&#xff1a; #include<std…

博客搬家算法伪码

已有平台&#xff1a;CSDN博客、51CTO、博客园、WordPress不同平台的博客&#xff0c;数据解析方式不一样&#xff0c;数据抓取和存储都是类似的。1.确定博客首页地址a.平台地址比如&#xff0c;CSDN的博客地址是 http://blog.csdn.net/b.账号fansunionCSDN某个用户的地址是&am…

用js做分页,点击下一页时,直接跳到了最后一页——Number()的妙用

Number()的妙用 Number()是javascript中将字符型转换为数值型的函数&#xff1b;问题描述&#xff1a;做分页&#xff0c;用js实现&#xff0c;获取当前页面的值&#xff0c;然后js自加1&#xff0c;可是点击下一页时&#xff0c;直接跳到最后一页。选择跳转到某页的时候&#…

让Apache支持Wap网站

日前搭建一台Wap网站&#xff0c;环境为RedHat EL5ApachePHPMysql&#xff0c;要求支持wml文件。现将涉及到的配置修改记录如下&#xff1a;1、修改Apache的httpd.conf文件&#xff0c;增加如下内容。AddType application/x-httpd-php .wmlAddType text/vnd.wap.wml .wml;chars…

vue传中文标点_vue项目引入第三方高德地图实现标点定位

vue项目中&#xff0c;高德地图使用。引入vue中。异步导入vue中。gaoDe(key) {window.onApiLoaded function () {var map new AMap.Map(container, {resizeEnable: true,center: [113.951955, 22.530825],zoom: 16});}var url https://webapi.amap.com/maps? v1.4.15&k…

CVE-2014-4877 wget: FTP Symlink Arbitrary Filesystem Access

目录 1. 漏洞基本描述 2. 漏洞带来的影响 3. 漏洞攻击场景重现 4. 漏洞的利用场景 5. 漏洞原理分析 6. 漏洞修复方案 7. 攻防思考 1. 漏洞基本描述 0x1: Wget简介 wget是一个从网络上自动下载文件的自由工具&#xff0c;支持通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载&am…

java判断某个字符串是否是数字

&#xff08;一&#xff09;利用正则表达式判断某个字符串是否是数字 public static boolean isNumeric(String s) {// 正则表达式return (s.matches("\\d*") && Pattern.compile("[0-9]*").matcher(s).matches());} &#xff08;二&#xff09;利…

mysql-nt.exe w3wp.exe cpu 100%_w3wp.exe(IIS ) CPU 占用 100% 的常见原因及解决办法

对于IIS管理员来说&#xff0c;经常会碰到Web服务器CPU占用100%的情况&#xff0c;以下是个人的日常工作总结和一些解决办法&#xff0c;主要用来剖析w3wp.exe(IIS )占用CPU 100%的一些原因 和解决方案&#xff0c;希望能对你有所帮助w3wp.exe的解释:全名&#xff0c;IIS Appli…

TOP结果详解

2019独角兽企业重金招聘Python工程师标准>>> TOP前5行 top - 16:24:25 up 284 days, 4:59, 1 user, load average: 0.10, 0.05, 0.01 top 当前时间、系统启动时间、当前系统登录用户数目、平均负载&#xff08;1分钟,10分钟,15分钟&#xff09;。平均负载&#x…

BZOJ3236 [Ahoi2013]作业

昨天晚上做的。。。差错一直查到今天 最后没办法问管理员要了数据才知道原来ans数组开小了233&#xff0c;简直沙茶 这道题不就是裸的莫队嘛 ||| 只要用树状数组维护当前的两种个数即可。 1 /**************************************************************2 Problem: 3…

mysql ddl dml 导出_MySQL:DDL和DML语句,弄明白了吗?

语句分类DDL&#xff08;Data Definition Languages&#xff09;语句&#xff1a;即数据库定义语句&#xff0c;用来创建数据库中的表、索引、视图、存储过程、触发器等&#xff0c;常用的语句关键字有&#xff1a;CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。增删改表的结构D…

敏捷水手——单体法到微服务之旅

\本文要点\\探究持续四年多的渐进式改革是什么样子&#xff1b;\\t探索为什么在变革软件和组织设计时要遵循康威定律&#xff1b;\\t看看如何将领导力应用到不同的团队、领域和层级&#xff1b;\\t举例说明变革管理如何依赖于理念和一贯的长远目标&#xff1b;\\t了解从职能型团…

SQLCMD的介绍

SQLCMD的介绍 原文:SQLCMD的介绍文章转载自&#xff1a;http://blog.sina.com.cn/s/blog_3eec0ced0100mhm2.html最近经常用到超过80M *.sql文件的导入问题。上网找了一下&#xff0c;发现超过80M的文件是不能在查询分析器中执行的。找了些解决方案&#xff0c;个人感觉最简单的…