单例设计模式
- 利用对象【单独堆内存】来分组管理,避免全局变量污染
- 每一个对象都是Object的单独实例,基于每一个实例对象来管理自己的属性和方法,实现分组的效果
- person1/person2 : namespace 命名空间
- 把描述同一个事物的属性和方法,放在相同的命名空间中,以此避免全局变量污染
let person1 = {
name:‘小王‘,
age:42,
friend:true
};
let person2 = {
name:‘小李‘,
age:18,
friend:false
};
- 利用闭包的思想【单独的执行上下文】来分组管理,避免全局变量污染
(function(){
let name=‘小王‘;
let age =42;
let friend =true;
const query = ()=>{};
//暴露api,挂载到GO中【不宜挂载过多,因为挂载过多也会冲突】
window.query = query;
})();
(function(){
let name=‘小李‘;
let age =42;
let friend =false;
query();
})();
- 高级单例设计模式,原生JS实现模块管理
let Amodule = (function(){
let n = 10;
const query = () =>{}
const sum = () =>{}
//暴露api
return{
query
};
})();
let Bmodule = (function(){
let n =20;
const sum = () =>{}
Amodule.query();
return{
//B模块想要暴露的api,给其他模块用
}
})();
- 单例设计模式需要自己写代码管理,并且如果每一个模块是一个单独的JS,最后导入JS的时候,需要认真管理先后倒入的顺序【按照模块之间的依赖去处理】
- AMD:按需倒入,有效管理模块之间依赖【requires】,所有依赖的模块必须前置导入,不能随用随导入
- CommonJS规范【只能在Node环境下运行,随用随导入,无需依赖前置导入】
- 导入:require(url)
- 导出:module.exports = { }
- seajs(淘宝玉伯大佬),把CommonJS规范搬到浏览器端运行,‘CMD‘
- ECMA官方模块规范:ES6Module
- 导出:export & export default { }
- 导入:import * as from ‘./A.js‘
- 依赖前置,浏览器可以直接支持,nodejs环境不支持
- import a from ‘.///’ 和 import { a } from ‘.///’的区别,{a}是直接解构赋值了,使用export default{}导出,不需要{}导入,直接可以使用对应导出方法;使用export导出,需要使用{}导入
- export default { } 只能有一个