JavaScript模块化学习基础
http://www.ruanyifeng.com/blog/2012/10/javascript_module.html
一、原始写法
模块就是实现特定功能的一组方法。
不同函数简单放在一起就算一个模块
如:
function func1(){
//执行代码
}
function func2(){
//执行代码
}
上面函数func1和func2组成了一个模块,使用的时候直接调用即可;
缺点:污染全局变量,无法保证不与其他模块变量名发生冲突,而且模块之间看不出直接关系
二、对象写法
为了解决上面的缺点,可以把模块写成一个对象,所有模块成员放在对象里面。
如:
var module=new Object({
_count:0,
func1:function(){
//执行代码
},
func2:function(){
//执行代码
}
});
上面,func1和func2函数封装在module对象里,使用的时候就是调用这个对象的属性,如:module.func1();
缺点:这样的写法暴露了所有模块成员,内部状态可以被外部改写。比如,外部代码可以直接改变内部_count值,如:module._count=3;
三、立即执行函数写法
使用立即执行函数可以达到不暴露私有成员的目的
如:
var module=(function(){
var _count=0;
var _testVar=1;
var func1=function(){
console.log('func1_'+this._count);
};
var func2=function(){
console.log('func2_'+_count);
};
return {
func1:func1,
func2:func2,
_count
};
})();
module._count=2;
module.func1();
module.func2();
使用上面写法,外部代码无法调用到_testVar变量,console.log(module._testVar);//undefined
注意上面写法,外部可以调用func1和func2及_count,是函数以对象形式返回了变量;
改变了内部变量_count值,如果内部函数func1不使用this,则不能输出后面改变了_count的值
上面就是JavaScript模块的基本写法
四、放大模式
如果一个模块很大,必须分成几个部分,或者一个模块需要继承另一个模块,这时就有必要采用“放大模式”(augmentation)
如:
var module=(function(mod){
mod.func3=function(){
console.log('func3_'+this._count);
}
return mod;
})(module);
module.func3();
五、宽放大模式
浏览器中,模块的各个部分通常都是从网上获取的,有时无法知道哪个部分会先加载,如果采用上面的写法,没有先加载之前的模块,而是直接先加载了上面四中的模块,就会报空对象的错,这时就要采用“宽放大模式”。
如:
var module=(function(mod){
mod.func3=function(){
console.log('func3_'+this._count);
}
return mod;
})(window.module||{});
module.func3();
与“放大模式”相比,“宽放大模式”就是“立即执行函数”的参数可以是空对象。
六、输入全局变量
独立性是模块的重要特点,模块内部最好不与程序的其他部分直接交互
为了在模块内调用全局变量,必须显示的将其他变量输入模块
如:调用JQuery
var moduleJQuery=(function($){
var func=function(){
$('#txt').val('Text');
};
return {
func:func
};
})(jQuery);
moduleJQuery.func();
JavaScript模块化学习基础的更多相关文章
- javascript 模块化学习:Class打包出来无法实例化问题
菜鸟初学前端,第一次尝试使用webpack, 目的是做一个lib,想用webpack + babel 自动化打包出来 es5 的js代码 模块中用到了Class,直接export{className} ...
- 该如何理解AMD ,CMD,CommonJS规范--javascript模块化加载学习总结
是一篇关于javascript模块化AMD,CMD,CommonJS的学习总结,作为记录也给同样对三种方式有疑问的童鞋们,有不对或者偏差之处,望各位大神指出,不胜感激. 本篇默认读者大概知道requi ...
- JavaScript学习基础部分
JavaScript学习基础 一.简介 1.JavaScript 是因特网上最流行的脚本语言,并且可在所有主要的浏览器中运行,比方说 Internet Explorer. Mozilla.Firefo ...
- JavaScript模块化编程之AMD - requireJS基础使用
JavaScript模块化编程之AMD requireJS基础使用 标签(空格分隔): JavaScript 参考文章 AMD规范 AMD是"Asynchronous Module Defi ...
- Javascript模块化编程(一):模块的写法 (转载 学习中。。。。)
转载地址:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 阮一峰 大神:http://www.ruanyifeng.com/ ...
- js 模块化的一些理解和es6模块化学习
模块化 1 IIFE 2 commonjs 3 浏览器中js的模块化 4 简单理解模块加载器的原理 5 es6 之前在参加百度前端技术学院做的小题目的时候,自己写模块的时候 都是写成立即调用表达式( ...
- 实现一个JavaScript模块化加载器
对任何程序,都存在一个规模的问题,起初我们使用函数来组织不同的模块,但是随着应用规模的不断变大,简单的重构函数并不能顺利的解决问题.尤其对JavaScript程序而言,模块化有助于解决我们在前端开发中 ...
- Javascript模块化编程之难处
接着上一篇“Javascript模块化编程之Why”说起,Javascript担子重了之后程序也就复杂了.在大把语言都模块化编程的形势下,Javascript也不可能袖手旁观啊,毕竟这是一条经过实践检 ...
- JavaScript模块化思想之入门篇
在写正文之前先写一点废话,从我大三下学期正式接触前端到现在,已经六个月了.自己从HTML,CSS,简单的JS验证开始,一点点开始走入前端的世界.越发的感觉前端这一领域散发着无穷的魅力,也许这和我真心喜 ...
随机推荐
- [转]面向GPU的多LOD因子的大规模场景可视化策略
直接附上原文链接: 1.面向GPU的多LOD因子的大规模场景可视化策略 2.Real-Time Dynamic Level of Detail Terrain Rendering with ROAM
- connect函数详解
不得不说,客户端的connect函数和服务端的accept函数是一对好基友,如果客户端没有去connect, 那么服务端的accept会一直在那里傻傻地痴痴地等待,我们先来看看connect函数的原型 ...
- PHP基础20:创建文件
<?php /* 1.PHP 创建文件 - fopen() fopen() 函数也用于创建文件.也许有点混乱,但是在 PHP 中,创建文件所用的函数与打开文件的相同 如果您用 fopen() 打 ...
- [CareerCup] 4.7 Lowest Common Ancestor of a Binary Search Tree 二叉树的最小共同父节点
4.7 Design an algorithm and write code to find the first common ancestor of two nodes in a binary tr ...
- 自己写的一个关于Linq to Entity 动态查询的例子
这两天一直想写一个动态查询的方式,先是晚上查询了一下,发现大家写的差不多都是一样的[如:http://www.cnblogs.com/ASPNET2008/archive/2012/10/28/274 ...
- 慢牛系列三:React Native实践
上次发布了我的慢牛股票APP之后,有园友反馈有点卡,这个APP是基于Sencha Touch + Cordova开发的,Sencha本身是一个比较重的框架,在Chrome里运行性能还是不错的,但是在A ...
- 使用spring cloud实现分布式配置管理
<7天学会spring cloud系列>之创建配置管理服务器及实现分布式配置管理应用. 本文涉及到的项目: 开源项目:http://git.oschina.net/zhou666/spri ...
- 获取Web.config配置节
static string GetAppSetting(string key) { var appSetting = ConfigurationManager.AppSettings[key]; if ...
- Linq之Lambda表达式初步认识
目录 写在前面 匿名方法 一个例子 Lambda 定义 一个例子 总结 参考文章 写在前面 元旦三天在家闲着无事,就看了看Linq的相关内容,也准备系统的学习一下,作为学习Linq的前奏,还是先得说说 ...
- 第七章:Javascript数组
数组是值的有序结合.每个值叫做一个元素,而每个元素在数组中都有一个位置,用数字表示,称为索引. javascript数组是无类型的:数组的元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类 ...