首页 > 其他分享 >7.前端设计模式之模块模式

7.前端设计模式之模块模式

时间:2023-09-14 20:32:46浏览次数:41  
标签:function square 前端 export 模块 import 设计模式 math

将代码拆分成更小更易复用的代码块 

JavaScript从ES2015开始支持模块化,一个文件就是一个模块,以前也可以把一个大的JS文件拆分到多个文件里,但容易出现定义的变量、函数名称冲突,文件多了依赖关系也不好管理,上线时觉得a.js文件没什么用就没发布,直到某个功能出现xxx is not a function或者类似的错误才恍然大悟。

现在好了,在语法层次直接支持了模块,相当于新增了一个模块作用域,在这个模块里定义的变量、函数默认就只能在当前模块文件里使用,如果其它模块要用就必须在所属模块导出export,使用时还必须先导入import。

例如定义math模块也就是新建math.js文件并在里面写入相关代码:

function add(x, y) {
  return x + y;
}
function multiply(x) {
  return x * 2;
}
function subtract(x, y) {
  return x - y;
}
function square(x) {
  return x * x;
}

这个时候模块外部想要使用add函数是用不成得,因为没有export.

加上export外部就可以import使用了

math.js:

export function add(x, y) {
  return x + y;
}

export function multiply(x) {
  return x * 2;
}

export function subtract(x, y) {
  return x - y;
}

export function square(x) {
  return x * x;
}

index.js:

import { add, multiply, subtract, square } from "./math";

console.log(add(2, 3));
console.log(multiply(2));
console.log(subtract(2, 3));
console.log(square(2));

除了export还有export default,区别在于使用export导出的成员,使用时需要使用“{成员名称}”的形式import, 而使用export default导出的成员,可以直接使用”import 任意名称 from“的形式导入使用,比如在math.js中export default add:

export default function add(x, y) {
  return x + y;
}

在index.js中使用add:

import addFun from "./math"

其它使用export的还保持原来的引入方式:

import addFun,{multiply, subtract, square} from "./math"

有时候多个模块可能export的成员名称一样,用的时候就可能名称冲突,这个时候可以在import时使用as关键字更改成员在当前模块作用域名称

import {multiply as multiply_math, subtract as subtract_math, square as square_math} from "./math"

也可以直接使用"*"引入整个模块这样使用的时候就可以带上模块前缀避免名称冲突:

import * as math from "./math";
math.default(2,3);//使用export default导出的add
math.multiply(2);//使用export导出的multiply
math.subtract(2,3);//使用export导出的substract
math.square(2);//使用square导出的square

标签:function,square,前端,export,模块,import,设计模式,math
From: https://blog.51cto.com/u_14256460/7473854

相关文章

  • 前端
    前端介绍1、HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES11):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板语法->后端渲染完数据->返回数据给前端->在浏览器中查看2、Ajax的出现,后台发送异步请求,Render+Ajax混合3、单用Ajax(加载数据,DOM渲染页面):前后......
  • 软件设计模式系列之五——建造者模式
    1模式的定义建造者模式是一种对象创建型设计模式,它将一个复杂对象的构建过程与其表示分离。这意味着你可以使用相同的构建过程来创建不同类型的对象,而不必关心每个对象的内部细节。这种模式适用于构建具有复杂配置的对象,例如具有多个可选组件的汽车。2结构建造者模式的结构包......
  • Flutter插件flutter_boost 在android模块中的报红问题解决.
    1,在开发Flutter插件时,打开插件的android项目,准备编写native端的代码时,发现各种报红,代码无法跳转,体验十分不好。就像我下面的截图一样:导入了FlutterBoostflutterBoost源码爆红。但是运行正常。。这说明本身是没有问题的。。分明是没有错误的类都存在。但是就是爆红。。。。可......
  • 后端返回图片乱码,前端解决方法
    后端返回的文件流格式  前端解决axios({url:"/api/Component/ins/downloadQr?codes="+data.codeIdentification,method:"GET",headers:{"Authorization":window.platToken.token_type+""+windo......
  • 设计模式回顾之一:单例模式(Java的4种实现)
    设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。------------------------------------------------作为一个程序员,我并不知道"茴"字有4种写法。但是,我知道单例有4种写法。单例模式目的:保证一个类仅有一个实例,并提供一个访问它的全局访......
  • 设计模式回顾之二:外观/门面模式(Facade)
    设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。------------------------------------------------外观/门面模式(Facade)希望简化原有系统的使用方式,需要定义自己的接口。Facade模式简化了对所需子系统的使用过程,但是由于Facade并不......
  • 设计模式回顾之十二:迭代器模式(Iterator)
    设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。------------------------------------------------迭代器模式(Iterator)提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。适用于:访问一个聚合对象的内容而......
  • DC电源模块在保护设备损坏的重要功能
    BOSHIDADC电源模块在保护设备损坏的重要功能DC电源模块是一种电源管理设备,用于将交流电转换为直流电并提供给设备供电。它通常由多个电子元件组成,包括整流器、滤波器、稳压器等,以确保电源输出稳定,满足设备的电源需求。在实际应用中,DC电源模块有着非常重要的保护设备损坏的功能。以......
  • 设计模式回顾之十:工厂方法模式(FactoryMethod)
    设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。------------------------------------------------工厂方法模式(FactoryMethod)定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。......
  • 设计模式回顾之九:建造者模式(Builder)
    设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。------------------------------------------------建造者模式(Builder)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 适用于:当创建复杂对象的算法应该......