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(){ // ...
随机推荐
- loj2212 方伯伯的OJ
题意: n<=1e8,m<=1e5. 标程: #include<cstdio> #include<algorithm> #include<cstring> ...
- leetcode-86-分割链表
题目描述: 方法一: # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.va ...
- 关于Slice的一些补充说明
s[m:n:l] 规则总结如下. (1) 范围 [m,n),从m开始轮询:超出范围后选边界值. l>0 l<0 关于边界值 (2) 把字符串完全反序,用 s[::-1]. 有些文档上说 s ...
- thinkphp 模板主题
一个模块如果需要支持多套模板文件的话,就可以使用模板主题功能. 默认情况下,没有开启模板主题功能,如果需要开启,设置 DEFAULT_THEME 参数即可: 大理石平台精度等级 // 设置默认的模板主 ...
- 最新MySQL5.7.3.0版本安装(图文版本)
转自:http://www.myexception.cn/mysql/1609536.html 可以从http://dev.mysql.com/downloads/下载MySQL服务器安装软件包,我下 ...
- Windows进程创建的流程分析
. 创建进程的大体流程: 创建进程的过程就是构建一个环境,这个环境包含了很多的机制 (比如自我保护, 与外界通信等等). 构建这个环境需要两种"人"来协调完成(用户态和内核 ...
- csdn阅读更多自动展开插件
点击获取 当然也可以自己写脚本.写js.
- 电脑缺失ACPI.sys
解决方法:注:U盘内需要有PE系统 拷贝一份正常的acpi.sys文件到u盘,插入电脑 > 开机时按F9 > 选中第三个USB *** > 回车进入PE系统,将acpi.sys放入图 ...
- vue:element-ui输入框绑定回车事件
参考: https://segmentfault.com/q/1010000011347642 https://weiku.co/article/297/ vue监听input输入框的回车事件:key ...
- Ionic cordova-plugin-splashscreen
1.添加插件 cordova plugin add https://github.com/apache/cordova-plugin-splashscreen.git 2.设置启动画面 在根目录下面r ...