JS模块化编程(一)
- 需求背景
// 实际开发常需要将一些公用方法打包放在一个js文件,写法大致如下
function f1(){
// ...
}
function f2(){
// ...
}
function f3(){
// ...
}
// 上面的函数f1()\f2()\f3()...,组成一个模块;使用时直接调用就行;
So,问题来了
污染了全局变量; 无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系;
程序猿经过深思熟虑,决定适当优化,于是对象写法诞生了
- 对象写法
// 把模块写成一个对象,所有的模块成员都放到这个对象里面;
var myobj = new Object({
_count:0,
f1:function(){
// ...
},
f2:function(){
// ...
},
f3:function(){
//....
}
});
// 上面的函数f1()\f2()\f3(),都封装在myobj对象里;使用时直接调用这个对象的属性;
myobj.f1();
随着程序猿们写了无数的js,突然发现自己写的代码就像一个赤裸裸的女人,被人一览无余,肆意践踏,不够含蓄,不够深沉,不够帅...
myobj._count = -1;//可以随意修改这个属性
So,问题来了
我们应把重要的东西隐藏起来,包裹起来,穿上衣服
- 立即执行函数写法:JavaScript模块的基本写法
var myobj = (function(){
var _mimi = 2;
var f1 = function(){
// ...
};
var f2 = function(){
//...
};
return {
f1:f1,
f2:f2
};
})();
// 使用上面的写法,外部代码无法读取内部的_mimi变量;
console.info(myobj._mimi); // undefined;
时间如梭,程序猿慢慢变老了,万恶的资本家不给升职加薪,只好苦逼一天有一天...,程序依旧...
身体也慢慢变肥了,爱屋及乌,遇到特大程序模块,深恶痛绝,一定要减肥...
- JS放大模式
// 如果模块很大,必须分成几个部分,或者一个模块需要继承另一个模块,这时就有必要采用"放大模式";
var myobj = (function(depend){
depend.f4 = function(){
// ...
};
return depend;
})(denpend);
// 上面的代码为depend模块添加了一个新方法f4(),然后返回新的depend模块;
TMD,减肥过度了,把身体都搞出问题,
- JS宽放大模式
// 放大模式的写法,有可能加载一个不存在的空对象,这时就要采用"宽放大模式";
var myobj= (function(dep){
// ...
return dep;
})(dep || {});
// 与"放大模式"相比,"宽放大模式"就是"立即执行函数"的参数可以是空对象;
模块化js得以广泛应用,越来越得意,所有的对象变量都应遵循这一思想...
- 传入全局变量
// 封装是模块的重要特点,模块内部最好与程序的其他部分是隔离的,不直接发生关系;
// 为了在模块内部调用全局变量,必须显式地将其他变量输入模块;
var myobj = (function($,YUI){
// ...
})(jQuery,YAHOO);
// 上面的module模块需要使用jQuery库和YUI库,就把这两个库(其实是两个模块)当作参数输入myobj;
// 这样做除了保证模块的独立性,还使得模块之间的依赖关系变得明显;
JS模块化编程(一)的更多相关文章
- 从273二手车的M站点初探js模块化编程
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
- require.js实现js模块化编程(一)
1.认识require.js: 官方文档:http://requirejs.org/RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的Requ ...
- require.js实现js模块化编程(二):RequireJS Optimizer
require.js实现js模块化编程(二):RequireJS Optimizer 这一节,我们主要学习一下require.js所提供的一个优化工具r.js的用法. 1.认识RequireJS Op ...
- 初步理解require.js模块化编程
初步理解require.js模块化编程 一.Javascript模块化编程 目前,通行的Javascript模块规范共有两种:CommonJS和AMD. 1.commonjs 2009年,美国程序员R ...
- [转]js模块化编程之彻底弄懂CommonJS和AMD/CMD!
原文: https://www.cnblogs.com/chenguangliang/p/5856701.html ------------------------------------------ ...
- js模块化编程总结
大家都知道,js中的变量(variable)有其作用范围,比如:函数里用var定义的变量在函数外是看不到的,而定义在函数外面的变量(不能有没有var修饰)均是全局变量,在js程序的任何位置都可以访问. ...
- js模块化编程之彻底弄懂CommonJS和AMD/CMD!
先回答我:为什么模块很重要? 答:因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块.但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写 ...
- 好文推荐系列-------(5)js模块化编程
本文主要来源于阮一峰的<Javascript模块化编程>系列文章整合,原文地址:http://www.ruanyifeng.com/blog/2012/10/javascript_modu ...
- JS模块化编程(一):CommonJS,AMD/CMD
前言 模块化是什么? 为什么采用模块化? 场景: 一个html,因不同的业务需求开发,会不断的引入js文件.另外,a.js和b.js中的变量或函数必须是全局的,才能暴露给使用方. <script ...
- JS模块化编程(二)
背景 我们常在页面引用js遇到下面情况 <script src="1.js"></script> <script src="2.js&quo ...
随机推荐
- VS2015编译提示无法运行“rc.exe”
使用VSx64命令行编译项目,提示无法运行“rc.exe” 想办法搜索rc.exe和rcdll.dll这两个文件,然后拷贝到C:\Program Files (x86)\Microsoft Visua ...
- C++ template —— 类型区分(十一)
前面的博文介绍了模板的基础,深入模板特性,模板和设计的一些内容.从这篇开始,我们介绍一些高级模板设计,开发某些相对较小.并且互相独立的功能,而且对于这些简单功能而言,模板是最好的实现方法:(1)一个用 ...
- vc 使用ShellExecut来启动控制面板中功能模块的操作
文件夹,文件,网址可以创建快捷方式,控制面板 中的设置也可以创建快捷方式,下面是快捷方式的命令,使用方法:在桌面或文件夹的空白处点右键,选择新建,快捷方式,在“请键入项目的位置”输入下面的命 令,然后 ...
- codeforces水题100道 第一题 Codeforces Beta Round #1 A. Theatre Square (math)
题目链接:http://www.codeforces.com/problemset/problem/1/A题意:至少用多少块边长为a的方块铺满NxM的矩形区域.C++代码: #include < ...
- Lua中的closure(闭合函数)
词法域:若将一个函数写在另一个函数之内,那么这个位于内部的函数便可以访问外部函数中的局部变量,这项特征称之为“词法域”. 例:假设有一个学生姓名的列表和一个对应于没个姓名的年级列表,需要根据每个学生的 ...
- WebService连接postgresql( 失败尝试)
一.先进行postgresql的配置 1. 安装ODBC驱动 下载地址:http://www.postgresql.org/ftp/odbc/versions/msi/ 2. 打开 控制面板 -&g ...
- JAVA知多少
读<java解惑>感觉有意思的就记录一下. 1.判断奇数还是偶数 public boolean isOdd(int i){ return i%2==1; }; 这样子看起来很对,但是考虑到 ...
- java框架---->mybatis的使用(一)
这里我们记录一些mybatis的一些常用知识和项目中遇到的问题总结.快乐人生的三个必要元素是,有要做的事.热爱的事及盼望的事. mybatis的一些知识 一.mybatis插入返回主键值 插入的jav ...
- python中级---->pymongo存储json数据
这里面我们介绍一下python中操作mangodb的第三方库pymongo的使用,以及简单的使用requests库作爬虫.人情冷暖正如花开花谢,不如将这种现象,想成一种必然的季节. pymongo的安 ...
- VC++中如何复制对话框资源
法1: 在你的工程中添加另一个工程的rc文件,这时资源视图中就会出现两个rc,从后加的rc中拷贝资源到你自己工程的rc中就可以了. 法2:vc中如何拷贝一个工程的对话框资源到另一个工程 ...