1. 使用 对象 来模拟模块封装,可以避免命名冲突,但是对象里面的变量值可以被随意的修改
var modules2 = {
_count: 0,
m1: function () {
console.log('m1 ' + this._count)
},
m2: function () {
console.log('m2')
}
}
//2. 使用 方法 来模拟模块封装, return 想要暴露的方法或者变量, 可以避免用户对模块里面变量的随意修改,如果用户想要使用一些值,可以通过参数进行传递
var modules3 = (function () {
var _count = 0;
var m1 = function () {
console.log('modules3 m1')
}
var m2 = function () {
}
return {
count: _count,
m1: m1,
m2: m2
}
})()
// 方法 的继承
var mod = function () {
this.m1 = () => { };
this.m2 = () => { }
}
var mod2 = (function (mod) {
var m = new Object();
m._count = 0;
mod.call(m);
return m;
})(mod)
console.log(mod2); //_count:10, m1: f, m2: f
模块 的继承
var modules4 = (function (mode) {
var _count = 0;
var m1 = function () {
console.log('modules4 m1')
}
mode.m3 = function () {
console.log("mode3 m3")
}
return Object.assign({
m4: m1
}, mode)
})(modules3)
3. 模块规范 AMD 和 COMMONJS 的使用语法
// 模块规范 AMD 和 COMMONJS (定义编写模块的方式)
// 为了在服务器端,桌面端,应用程序端 使用 js 进行编程, 需要使用模块
// node是可以在服务器端进行编程的语言,node中的模块系统 就是 参照 commonJs 规范 实现的
// 慢慢衍生除了客户端(浏览器端)的模块规范, 也就是 AMD规范
// AMD规范 相对于 commonJs规范, 它是“异步加载”模式的, 不会阻塞进程, 所有依赖这个模块的语句,都会在该模块加载完成之后再运行
// 服务器端因为模块都是存放在本地硬盘可以同不加载完成,浏览器端加载速度取决于网速, 如果采用 commonJs的 同步模式, 浏览器可能会假死
// require.js 和 curl.js 实现了 AMD规范 require.js的使用方法
// require.js主要就做了两件事情, 异步加载模块 + 模块的定义(define)引用(require)
// require.js中,一个文件只能定义一个模块 第一个参数应该是依赖项名称数组
ES6的module
CMD