JS 模块化开发 2022-06-09

2022-06-09  本文已影响0人  一车小面包人
const MouseCounterModule=function(){
  let numClicks=0;
  const handleClick=()=>{
    alert(++numClicks);
  };
  return {
    countClicks:()=>{
      document.addEventListener("click",handleClick);
    }
  };
}();

扩展模块

(function(module){
  let numScrolls=0;
  const handleScrolls=()=>{
    alert(++numScrolls);
  };
  module.countScrolls=()=>{
    document.addEventListener("wheel",handleScroll);
  };
})(MouseCounterModule);

注意使用这种方法扩展模块时,扩展的模块内部的变量与原始的变量不共享作用域,各自享有作用域

define("MouseCounterModule",["jQuery"],$=>{
  let numClicks=0;
  const handleClicks=()={
    alert(++numClicks);
  };
  return {
    countClicks:()={
      $(document).on("click",handleClick);
    }
  };
});  

使用define方法,第一个参数是模块名字,第二个参数是当前模块依赖的模块列表,第三个参数是初始化模块
AMD方法具有以下优点:
1.自动处理依赖,无需考虑模块引入的顺序
2.异步加载模块,避免阻塞
3.在同一个文件中可以定义多个模块

const $=require("jQuery");
let numClicks=0;
const handleClick=()=>{
  alert(++numClicks);
};
module.exports={
  countClicks:()=>{
    $(document).on("click",handleClick);
  }
};
#在另外的文件中引用模块
const MouseCounterModule=require("MouseCounterModule.js");
MouseCounterModule.countClicks();

CommonJS是同步加载(阻塞模式)

const ninjia="yoshi";
export const message="hello";
export function sayHello(){
  console.log("hello")l
};

想导出谁就在谁的前面加上export
只有加上export的变量才能在模块外被访问,其余变量不能

export {message,sayHello};

上述导出还可以使用{}导出

export default class Ninjia{
  constructor(name){
    this.name=name;
  };
};
import testName from "Ninjia.js"

使用export default时,import 导入时模块的名字可以自定义;除此以外,没有使用export default的模块在导入时必须用{}

export const ninjia="yoshi" 导出变量
export function sayHello(){} 导出函数
export class Ninjia{} 导出类
export default class Ninjia{} 导出默认类
export default function sayHello(){} 导出默认函数
export {ninjia,sayHello} 导出存在的变量
export {ninjia as samuriy} 使用别名
import Ninjia from "Ninjia.js" 导入默认导出
import {Ninjia,ninjia} from "Ninjia.js" 导入命名导出
import * as Ninjia from "Ninjia.js" 导入全部导出
import {Ninjia as ninjia} from "Ninjia.js" 导入别名

当导入全部导出使用*号后接as +模块名字

上一篇 下一篇

猜你喜欢

热点阅读