javascript 模块化 (切记:学习思想)
模块化(切记:学习思想)
如果不用模块化编写代码,那么会具有以下问题:
- 代码杂乱无章,没有条理性,不便于维护,不便于复用
- 很多代码重复、逻辑重复
- 全局变量污染
- 不方便保护私有数据(闭包)
模块化的基本实现:闭包的自调用函数
//日期控件
var DatePicker = (function(){
return {
init(){
}
}
})();
//Header
// tabbar
// login
//Content
// sidebar
// table
//Footer
var KTV=(function(){
return {
pay(){
},
xiaofei(){
}
}
})()
AMD模块化 -->requireJS
- AMD:async module define:异步模块定义
- AMD其实就是requireJS实现的模块化解决方案
其他模块化解决方案:
- CommonJS:Node中使用的模块化解决方案
- CMD(common module define):seajs中提出来的模块化解决方案
- 其实CMD可以认为是CommonJS的前端实现
- seajs由阿里的(玉帛)编写
- seajs在2,3年前比较火,从去年开始已经停止更新
- vue 、angular、react已经集成了各自的模块化
- es6模块化
- webpack也有模块化的解决方案
vue、angular、react已经将模块化的思想植入在里面
AMD和CMD的不同之处:
- amd需要依赖前置,cmd需要依赖就近
- 导入导出方式不同:
- amd通过define定义,return导出;
- cmd通过不需要定义,只需要最后通过module.exports、exports导出
requireJS —— AMD规范
中文网:http://www.requirejs.cn/docs/api.html#jsfiles
基本用法
//1、通过script标签导入requirejs源文件
//2、编写模块文件,基本格式如下:
//cart.js
define([],function(){
console.log('cart模块');
})
//product.js
define([],function(){
console.log('product模块');
})
//3、首页调用模块:
require(["cart.js","product.js"],function(){
//编写后面的逻辑代码
})
//等价于:
require(["cart","product"],function(){
})
入口文件
配置
require.config({
//baseUrl
//paths
})
定义模块的返回值(返回值相当于模块的入口)
//cart.js:
define([],function(){
return {
init(){
},
addProduct(){
}
}
})
//首页:
require(["cart"],function(cart){
cart.init();
cart.addProduct();
})
- 注意:一般在导入模块的时候,需要将
有返回值的模块在[前面]导入,无返回值的模块在[后面]导入
案例——模块依赖子模块
//productAdd.js
define([],function(){
return {
init(){
console.log("添加商品");
}
}
})
//productEdit.js
define([],function(){
return {
init(){
console.log("编辑商品");
}
}
})
//product.js
define(["productAdd","productEdit"],function(productAdd,productEdit){
return {
init(){
console.log("商品列表");
},
add(){
productAdd.init();
},
edit(){
productEdit.init();
}
}
})
//首页:
require(["product"],function(product){
product.init();
product.add();
product.edit();
})
检测第三方库是否支持AMD规范
if ( typeof define === "function" && define.amd ) {
define([], function() {
return jQuery;
} );
}
- 类似的还有:echarts
常用的模块、文件夹路径的配置
一般用于配置第三方模块,比如jquery、bootstrap、zepto等等
require.config(
paths:{
jquery:"js/lib/jquery-1.11.min",
zepto:"js/lib/zepto.min",
bootstrap:"assets/bootstrap/js/bootstrap.min"
}
) define(["jquery","zepto"],function($,$$){ }) require(["jquery","bootstrap"],function($){ })
插件
- 插件列表:
https://github.com/requirejs/requirejs/wiki/Plugins - i18n 国际化
- text 加载文件(.html文件。。。)
- 插件github地址:https://github.com/requirejs/text
requirejs和vuejs浅显的比较
- requirejs是一个库
- 相当于:一个房间
- 相当于:一个底盘
- 功能:只是一种模块化的解决方案
- vue是一个框架
- 相当于:一栋楼
- 功能:1、不仅仅是模块化的解决方案
- 2、减少了DOM的操作(-->jquery的功能)
- 3、。。。。。。
requirejs解决循环依赖
- a已经依赖了b
- b中先添加require模块的依赖,然后再添加a的依赖,但是并不要去通过回调函数的形参获取返回值
define(["require","a"],function(require){})- 在需要执行a模块代码的时候,
require("a")()
node中的模块化
- require("http").createServer()
- require("fs").readFile()
- require("common/type").doSth()
前端路由的意义
- 1、通过路由将各个功能从url上面就分辨出来了
- /user/list
- /user/3
- /user/edit/3
- 2、路由还可以进行前进、后退等导航操作
前端路由的实现方式
- 1、监听window对象的hashchange事件
- hash值:通过location.hash获取,获取的值以
#开头 - 也可以通过location.hash来设置hash值,当然设置的新hash也应该以
#开头
- hash值:通过location.hash获取,获取的值以
- 2、history对象:popState/pushState
ES6模块化
浏览器调试
<script type="module">
//导入模块
</script>
基本用法
//cart.js
export default {
name:"张三",
age:18
}
//index.js
import cart from "./cart.js"
cart.name
cart.age
导出模块
//cart.js
export const age = 18;
export function f1(){
console.log("f1函数");
}
//默认返回值
export default {
init(){
console.log("初始化");
}
}
//index.js
import cart,{ age,f1 } from "./cart.js"
cart.init();
age,
f1();
导入模块
//index.js
import cart as cartIndex from "./cart.js"
import { age as AGE } from "./product.js"
//使用变量:cartIndex
//使用变量:AGE
javascript 模块化 (切记:学习思想)的更多相关文章
- 该如何理解AMD ,CMD,CommonJS规范--javascript模块化加载学习总结
是一篇关于javascript模块化AMD,CMD,CommonJS的学习总结,作为记录也给同样对三种方式有疑问的童鞋们,有不对或者偏差之处,望各位大神指出,不胜感激. 本篇默认读者大概知道requi ...
- JavaScript模块化思想之入门篇
在写正文之前先写一点废话,从我大三下学期正式接触前端到现在,已经六个月了.自己从HTML,CSS,简单的JS验证开始,一点点开始走入前端的世界.越发的感觉前端这一领域散发着无穷的魅力,也许这和我真心喜 ...
- Javascript模块化编程(一):模块的写法 (转载 学习中。。。。)
转载地址:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 阮一峰 大神:http://www.ruanyifeng.com/ ...
- javascript模块化编程思想、实现与规范
随着BS架构的发展,网站逐渐变成了互联网应用程序,嵌入网络的JavaScript代码越来越庞大,越来越复杂(业务逻辑处理或用户交互很多写在前端).网页越来越像桌面程序,需要一个团队分工协作.进度管理. ...
- Javascript模块化开发-轻巧自制
Javascript模块化开发-轻巧自制 一.前言现在javascript的流行,前端的代码越来越复杂,所以我们需要软件工程的思想来开发前端.模块化是必不可少的,这样不仅能够提高代码的可维护性.可扩展 ...
- 实现一个JavaScript模块化加载器
对任何程序,都存在一个规模的问题,起初我们使用函数来组织不同的模块,但是随着应用规模的不断变大,简单的重构函数并不能顺利的解决问题.尤其对JavaScript程序而言,模块化有助于解决我们在前端开发中 ...
- JavaScript模块化开发&&模块规范
在做项目的过程中通常会有一些可复用的通用性功能,之前的做法是把这个功能抽取出来独立为一个函数统一放到commonFunctions.js里面(捂脸),实现类似于snippets的代码片段收集. fun ...
- JavaScript模块化-require.js,r.js和打包发布
在JavaScript模块化和闭包和JavaScript-Module-Pattern-In-Depth这两篇文章中,提到了模块化的基本思想,但是在实际项目中模块化和项目人员的分工,组建化开发,打包发 ...
- NNVM打造模块化深度学习系统(转)
[摘录理由]: 之所以摘录本文,主要原因是:该文配有开源代码(https://github.com/dmlc/nnvm):读者能够直接体会文中所述的意义,便于立刻展开研究. MXNet专栏 :NNVM ...
随机推荐
- 拷贝本地文件到docker容器内部
#复制本地目录的xxx到镜像内部并且为xxx docker cp /home/xxx targetImage:/home/xxx
- 【使用篇二】配置文件application.properties参数详解(21)
springboot提供了许多启动器starter,大部分的启动器都有配置属性,这些配置属性一般可以在这里找到: xxxxxxxx-autoconfigure-xxxxx.jar/META-INF/s ...
- 《工作笔记:移动web页面前端开发总结》
工作笔记:移动web页面前端开发总结 移动web在当今的发展速度是一日千里,作为移动领域的门外汉,在这段时间的接触后,发现前端开发这一块做一个小小的总结. 1.四大浏览器内核 1.Trident (I ...
- 关于java中三种初始化块的执行顺序
许多小伙伴对于java中的三种初始化块的执行顺序一直感到头疼,接下来我们就来分析一下这三种初始化块到底是怎么运行的.有些公司也会将这个问题作为笔试题目. 下面通过一段代码来看看创建对象时这么初始化块是 ...
- Python 爬虫从入门到进阶之路(一)
通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu.Google.Yahoo等)的重要组成部分.主要目的是将互联 ...
- Windows系统调用中的系统服务表
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中的系统服务表 如果这部分不理解,可以查看 ...
- TypeScript `this` 入参
考察下面的示例代码: class MyClass { constructor(protected foo: string) {} @MyDecorator bar() { console.log(&q ...
- Selenium(一):原理与安装、简单的使用
1. selenium原理 1.1 selenium介绍 Selenium是一个Web应用的自动化框架. 通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面. 比如点击界面按钮,在文本框 ...
- JavaScript 字符串是否包含某个字符串
字符串方式 indexOf() (推荐) var str = "123"; console.log(str.indexOf("3") != -1 ); // ...
- iOS----------如何给github的README添加图片
1.在你的项目中建一个文件夹,专门存放图片.如果想简单操作的话,可以截个图直接拉到项目中. 2.将建好的文件夹上传到github进行同步 3.在github上找到图片的URL地址 4.按照如下格式 ...