js的模块化写法
记得前两天自己写一个动画首页,动画很复杂,我用的fullpage虽然相对比较简单,但是每个页面的animation各有差异,需要相对控制,估计有上千行的js代码,写的心情乱糟糟的。
如何让代码量巨大,而且可以方便的管理,不会出现命名的冲突,代码结构乱七八糟问题,让代码设计结构清晰明了,这是一个巨大的需求
其实这就是一个需求分析和解决方案实施的过程。
function m1(){
//...
}
function m2(){
//...
}
一般人没有什么面向对象和模块化的概念会这么去写。确实js的面向对象不会像java一样明了,除了难以管理就是命名冲突的问题了。
var module1 = new Object({
_count : ,
m1 : function (){
//...
},
m2 : function (){
//...
}
});
把方法封装成对象的方法,这样就可以相当于给函数方法名加个前缀一样,但是麻烦是代码依然会暴露大量的变量,设计代码应该尽量让代码不必要暴露的变量封起来。
于是有人发明了这种写法,执行和上一个对象写法一样,也可以少暴露变量了,这样就是面向对象模块化的基本写法了,但是还要改进的
(function(){
var _count = 0;
var module1 = function(){
var m1 = function(){
//...
};
var m2 = function(){
//...
};
return {
m1 : m1,
m2 : m2
};
};
window.module1 = module1()
})()
这种方法是闭包的写法,可以把大量的代码写在闭包里,最后用添加到window属性当中,就暴露出去只有自己想暴露的方法了,这样代码的书写余地也更大了。
var module2 = (function (mod){
mod.m3 = function () {
//...
};
return mod;
})(module1);
这段代码的意义是实现继承,传入modele,添加新的方法,然后返回,便得到一个新的对象,这个对象有了新的参数
模块的规范
先想一想,为什么模块很重要?
因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。
但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套!考虑到Javascript模块现在还没有官方规范,这一点就更重要了。
目前,通行的Javascript模块规范共有两种:CommonJS和AMD。我主要介绍AMD,但是要先从CommonJS讲起。
var math = require('math');
math.add(,); //
commonJs是这么做的,require相当于load就是加在math.js,然后调用,这是用在服务器端的,但是客户端怎么办,客户端需要异步加载
所以出现了AMD
require(['math'], function (math) {
math.add(, );
});
通过回掉的方式异步加载。
目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js
js的模块化写法的更多相关文章
- require.js模块化写法
模块化 模块就是实现特定功能的一组方法.只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块. 下述两种写法等价 exports 对象是当前模块的导出对象,用于导出模块公有方法和属性. ...
- JS模块化写法
/* 模块化写法*/ var Person=function(){ var name='Jone', age='24', sex='male'; function createIdea(){ //{. ...
- js日期的写法,获取girdviw的行数、提示信息、验证数量信息
//制订日期(js日期的写法) var myDate = new Date(); var theDate = myDate.toLocaleDateString(); //获取今天的日期 //获取控 ...
- js的模块化规范
js的模块化规范常见的有:AMD,CMD,commonJS,UMD,es6 前期在没有模块化的时候,js文件十分庞大,于是就按功能抽离划分为多个js文件. 但是在html页面通过script的方式加载 ...
- sea.js的模块化开发
为什么使用sea.js? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像Node.js 一般书写模块代码. 自然 ...
- jq和js用法:入口写法
jq和js入口写法demo: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- node.js模块化写法入门
子模块的写法: function SVN(){ console.log('svn initialized'); return this; } function getInstance() { cons ...
- js模块化开发——require.js的实战写法1
关于在Require.js使用一个JS插件的问题 我需要在项目中引用一个js控件,这个控件依赖于a.js,b.js,c.js,.....n.js N多个js以及jquery及jquery-ui,各js ...
- JS模块化写法(转)
一.原始写法 模块就是实现特定功能的一组方法. 只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块. function m1(){ //... } function m2(){ // ...
随机推荐
- bind()的模拟实现
上一篇对call和apply的模拟实现做了一个梳理,可参见:模拟实现call.apply,下面将具体研究一下bind啦啦啦 1. bind和call/apply的差别 bind方法会创建一个新函数,返 ...
- Luogu P3802 小魔女帕琪(期望)
P3802 小魔女帕琪 题意 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组 ...
- Powerdesigner 生成数据字典
https://www.jianshu.com/p/f491d0d3c503http://blog.csdn.net/adparking/article/details/50402980http:// ...
- 二分图——多重匹配模板hdu1669
好像多重匹配一般是用网络流来做的.. 这是匈牙利算法的模板:lim是每个组的上界 思路是每个组都可以匹配lim个点,那么当点x遇到的组匹配的点数还没有超过lim时,直接匹配即可 如果已经等于了lim, ...
- 数论GCD——cf1055C
被一道数论题卡了半天 网上的题解说只要匹配l或者r就行,想了下还真是.. 能让r1和r2对其就让他们对其,不能对其就讨论一下两种情况就可以了 #include <bits/stdc++.h> ...
- 牛人blog 头脑风暴 (持续添加与更新)
Http协议详解 http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html android 实现分享功能两种方法 http://w ...
- 隐藏/显示jeecg-boot 后端管理页面的右侧的系统设置
登录后台,通过添加一个下拉选项[系统设置]来控制系统的后侧系统设置,布局如下: 修改UserMenu.vue文件 1.全局搜索“账户设置”,找到对应的vue文件:UserMenu.vue 2.添加[系 ...
- 2019牛客暑期多校赛(第三场)B-求01串中的最长01数量相等的子串和子序列
https://ac.nowcoder.com/acm/contest/883/B 首先先把0所在的位置变-1,1所在位置变1,然后统计一个前缀和,用sum[i]表示. 那么如果从起点开始的话只要满足 ...
- C#获取七牛云token/删除七牛云图片接口
// 获取七牛token public ApiResponse GetQiniuToken(QiniuToken req) { try { Mac mac = new Mac(req.AccessKe ...
- Anaconda如何配置多版本Python
https://blog.csdn.net/guanmaoning/article/details/80031279