美文网首页
JS 模块化开发 2022-06-09

JS 模块化开发 2022-06-09

作者: 一车小面包人 | 来源:发表于2022-06-09 21:12 被阅读0次
  • 在ES5中使用传统的闭包等方法实现模块模式
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);

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

  • 使用AMD定义模块
define("MouseCounterModule",["jQuery"],$=>{
  let numClicks=0;
  const handleClicks=()={
    alert(++numClicks);
  };
  return {
    countClicks:()={
      $(document).on("click",handleClick);
    }
  };
});  

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

  • 使用CommonJS定义模块
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是同步加载(阻塞模式)

  • ES6模块化
    1.export--从模块外部指定标识符
    2.import--导入模块标识符
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 +模块名字

相关文章

  • 模块化开发

    js模块化开发vue模块化开发

  • webpack4.0各个击破(4)—— Javascript &

    一. Js模块化开发 javascript之所以需要打包合并,是因为模块化开发的存在。开发阶段我们需要将js文件分...

  • JS 模块化开发 2022-06-09

    在ES5中使用传统的闭包等方法实现模块模式 扩展模块 注意使用这种方法扩展模块时,扩展的模块内部的变量与原始的变量...

  • 前端模块化

    在学node.js, 实际上就是基于common.js开发的,所以了解了一下模块化开发。 JS的模块化初衷和所有语...

  • 做了这么久的前端开发,听过Css模块化开发么?

    说起前端模块化开发,大部分人可能只会想到js模块化开发吧,网上也确实有各种各样的js模块化方法,但是鲜有谈论Css...

  • vue模块化开发以及组件封装思想

    js模块化开发 为什么会有模块化开发? 代码重用时,引入js文件的数目可能少了,避免来代码的累赘。 代码复用高,开...

  • JS中的模块规范:AMD,CMD,CommonJS, UMD

    前端开发一直在强调js模块化,将一个功能当做一个模块来开发,js本身并没有模块的功能。JS中的模块化规范主要有: ...

  • 模块化开发

    前端JS模块化开发有两大规范AMD合CMD,下面以我的理解来简单总结一下模块化开发的思想 ,以及js前端常用的AM...

  • vue2模块化开发以及组件封装思想

    模块化开发 为什么会有模块化开发? 代码重用时,引入js文件的数目可能少了,避免来代码的累赘。 代码复用高,开发效...

  • webpack基础笔记

    webpack基础 1.前端工程化 实际的前端开发: 模块化:(js的模块化,css的模块化,资源的模块化) 组件...

网友评论

      本文标题:JS 模块化开发 2022-06-09

      本文链接:https://www.haomeiwen.com/subject/pwommrtx.html