06 模块化设计|单例设计模式|CommonJS | ES6Module

单例设计模式

  • 利用对象【单独堆内存】来分组管理,避免全局变量污染
  • 每一个对象都是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 { } 只能有一个

   

06 模块化设计|单例设计模式|CommonJS | ES6Module

上一篇:JavaScript标准Selection操作


下一篇:mobx对修饰器的实验支持功能在将来的版本中可能更改。在 “tsconfig“ 或 “jsconfig“ 中设置 “experimentalDecorators“ 选项以删除此警告