Module Pattern是JavaScript里面最常见的编码模式。

  匿名闭包是这个模式可以实现的前提,例如下面的代码:

1     (function()
2     {
3         function dosomething()
4         {
5             console.log("dosomething");
6         }
7     })()

  上面的(function(){})返回的是一个函数引用,在后面再加()变成这样:(function(){})()表示执行这个函数,所以这样写是可以的,我还以为我以前出错了呢。这是因为我发现这样写也行:

    (function (){function dosomething(){console.log("dosomething");}}());

  用括号把这个匿名函数表达式括起来,如果不括起来,会认为这是一个函数定义,所以提示没有函数名出错。

下面我来进入正题:

  1,全局导入。通过传入参数,可以避免一些难以管理的代码问题:传入window输出window的高。

1     (function(w)
2     {
3         function dosomething()
4         {
5             console.log(w.screen.height);
6         }
7         dosomething();
8     })(window);

  2,模块的导出。可以让我们在匿名函数里面定义的方法可以给外面的空间使用:

 1     var moduleA = (function(w)
 2     {
 3         var _name = "Hello world";
 4         function getName()
 5         {
 6             console.log("you can do something before get name");
 7             return _name;
 8         }
 9         function setName(name)
10         {
11             console.log("you can do something before set name");
12             _name = name;
13         }
14         function privateDosomething()
15         {
16             console.log(getName() + " " + w.screen.height);
17         }
18         return {
19             publicDosomething:privateDosomething,
20             setName:setName,
21             getName:getName
22         }
23     })(window);
24     moduleA.publicDosomething();
25     moduleA.setName("Jobs");
26     console.log(moduleA.getName());
27 //    you can do something before get name 28 //    Hello world 1080 29 //    you can do something before set name 30 //    you can do something before get name 31 //    Jobs

  3,这样还不够,这样一个module只可以在一个js文件中,要想能够在不同的module里面使用,需要首先使用导入module,然后为module添加属性,然后把module导出:

现在一个module.js的文件里面写下面的代码(假设这是CoderA写的代码):

var moduleA = (function (m)
{m.dosomething2= function(){console.log("Hey , this is dosomething2!");}return m;
})(moduleA||{});
//<script src="Module.js"></script> 记得include进主文件

CoderB想用到CoderA写的Module,但是他也想自己加一些属性进去,首先他需要include CoderA的module.js :<script src="Module.js"></script>. 然后他开始敲自己的代码:

 1         var moduleA = (function(module,w)
 2         {
 3             var _name = "Hello world";
 4             function getName()
 5             {
 6                 console.log("you can do something before get name");
 7                 return _name;
 8             }
 9             function setName(name)
10             {
11                 console.log("you can do something before set name");
12                 _name = name;
13             }
14             function privateDosomething()
15             {
16                 console.log(getName() + " " + w.screen.height);
17             }
18
19             module.setName = setName;
20             module.getName = getName;
21             module.publicDosomething = privateDosomething;
22
23             return module;
24         })(moduleA||{},window);
25     moduleA.publicDosomething();
26     moduleA.setName("Jobs");
27     console.log(moduleA.getName());
28     moduleA.dosomething2(); //这个是CoderA写的代码
29 //    you can do something before get name
30 //    Hello world 1080
31 //    you can do something before set name
32 //    you can do something before get name
33 //    Jobs
34 //    Hey , this is dosomething2!

我们看到, 如果这里,CoderB也写了一个dosomething2属性,这样会覆盖掉A的,我还没想到有什么好的方法。或许可以用一个oldMethiod的变量存起来。

转载于:https://www.cnblogs.com/miyamoto/archive/2012/08/20/2648201.html

JavaScript Module Pattern相关推荐

  1. javascript设计模式-模块模式(module pattern)

    为什么80%的码农都做不了架构师?>>>    模块模式(module pattern) var someModule = ( function () {var privateVar ...

  2. 如何获取Javascript module metadata的parent module

    Created by Wang, Jerry on Sep 25, 2015 上下文如下: 其parent module的信息可用metadata的getParent方法得到:

  3. RequireJS使用小结1——for Effective JavaScript Module Loading

    1. require和define的区别 The require() function is used to run immediate functionalities, while define() ...

  4. javascript 的module 模块化

    The Module Pattern,模块模式,也译为模组模式,是一种通用的对代码进行模块化组织与定义的方式.这里所说的模块(Modules),是指实现某特定功能的一组方法和代码.许多现代语言都定义了 ...

  5. Unobtrusive JavaScript 不唐突的JavaScript的七条准则

    Unobtrusive JavaScript是一种将Javascript从HTML结构抽离的设计概念,避免在HTML标签中夹杂一堆onchange.onclick--等属性去挂载Javascript事 ...

  6. Javascript模块化编程(一):模块的写法

    随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者 ...

  7. JavaScript立即执行函数学习

    1.新建对象,方法内变量作用域理解错误 var md1 = {count: 0,add: function () {count++;},sub: function () {count--;},show ...

  8. JavaScript 模块化编程(一):模块的写法

    随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等--开发者不得不使 ...

  9. Javascript 的模块化编程及加载模块【转载+整理】

    http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 本文内容 引入 模块化 最初写法 对象写法 立即执行函数写法 放大模式 宽放 ...

最新文章

  1. python中使用 protocol buffer(Protobuf)
  2. 新闻与传播c刊_新闻传播类c刊有哪些
  3. hutool的定时任务不支持依赖注入怎么办_「架构」 - 定时任务 amp; Elastic-Job基本使用...
  4. GVim中以十六进制方式打开文件
  5. boost::weak_ptr和enable_shared_from_this
  6. 【电脑帮助】解决Win10系统电脑开机速度慢的问题
  7. sftp连不上服务器 vscode_vscode+sftp 开发模式环境的同步
  8. 嵌入式高速串行并行技术_推荐(张锋)
  9. 有哪些原版英文书籍值得推荐?
  10. Unity Metaverse(五)、Avatar数字人换装系统的实现方案
  11. kubernetes 亲和、反亲和、污点、容忍
  12. 聊一聊为什么在浏览器输入http://localhos8080会出现tomcat后台服务器的界面
  13. APP静默安装卸载管理器实现与上架到应用宝和豌豆荚
  14. 如何用PS去掉照片中的路人
  15. 《Buildozer打包实战指南》实战打包beautifulsoup (bs4)
  16. 怎样用DirectShow来压缩一个AVI文件
  17. Maco可视化报表设计器
  18. git提交代码常用命令
  19. SPSS(十二)SPSS对应分析(图文+数据集)
  20. 谷歌和亚马逊在赌场门口拉客,你上谁的船?

热门文章

  1. 32位jdk最大内存_Java安装之JDK下载篇
  2. 苹果ppt_我用PPT复刻了苹果公司的宣传广告,这是对PPT平滑功能的极致应用!
  3. express的基本用法
  4. linux3.8内核下载,linux 3.8内核usbmouse代码注释
  5. tcp长连接java_JAVA TCP长连接
  6. python 通配符域名_LeetCode-python 44.通配符匹配
  7. wifi卡慢延迟高_120平套三没网线,吃鸡延迟只有20ms,网件Orbi RBK50路由真香
  8. trackbar控件显示刻度值_安卓自定义电平流图形控件
  9. 机场精细化管理_全国首家!西安咸阳国际机场通过民航局安全管理体系专项审核...
  10. sublime Text3安装可以使xml格式化的插件