首页 > 编程语言 >Java登陆第三十三天——ES6(二)模块、模块化

Java登陆第三十三天——ES6(二)模块、模块化

时间:2024-03-09 20:22:38浏览次数:34  
标签:ES6 Java log temp title 张三 js console 第三十三

模块化是管理JS代码的一种手段,把代码拆分成小模块,提高代码维护性,复用性,拓展性。

模块类似与Java的包,可以从外部导入。

模块有三种导出方式

  1. 分别导出

  2. 统一导出

  3. 默认导出

  • 三种导出方式可以混用。

模块化的关键字有export、import、as和default

ES6的模块会自动开启严格模式。

在被导入时,JS会把整个模块当作一个对象。该对象内部属性、方法都是局部的。

模块栗子

定义外部模块temp.js

temp.js

const title="张三自传";

function fun() {
    console.log("张三开心的嘞");
}

class Person  {
    constructor() {
        console.log("张三构造器")
    }
    say(){
        console.log("张三的say方法");
    }
}

定义导入模块app.js,也会被当作程序的入口

//此时空白

定义首页index.html

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!-- 导入JS文件 添加type='module' 属性,否则不支持ES6的模块化 -->
    <script src="./app.js" type="module"></script>
</head>
<body>
基础定义完毕
</body>
</html>

结构如下,(忽略文件夹名)
image

分别导出

  • 在外部模块temp.js中使用export关键字选择需要导出的内容。

  • 在导入模块app.js中

    • 使用import关键字导入模块

    • 使用as关键字给导入模块设置对象名。(类似与SQL的设置别名)

    • 使用from关键字填写导入模块的地址。

因为被导入的模块会被解析成一个对象,所以需要设置对象名。

temp.js

export const title="张三自传";//选择导出属性title

export function fun() {//选择导出方法fun
    console.log("张三开心的嘞");
}

class Person  {
    constructor() {
        console.log("张三构造器")
    }
    say(){
        console.log("张三的say方法");
    }
}

app.js

//*表示temp.js中的所有成员  zs为设置的对象名
import * as zs from "./temp.js";

console.log(zs.title);//输出zs对象的属性title 打印内容 张三自传

zs.fun();//测试fun方法 打印内容 张三开心的嘞

let p1=new zs.Person();//报错 zs.Person is not a constructor

因为只选择导出常量title和方法fun(), 所以Person对象不会被找到。

统一导出

  • 在外部模块temp.js最后,使用export+花括号{}关键字统一导出,花括号内选择需要导出的内容。

  • 在导入模块app.js中

    • 使用import关键字导入模块

    • 使用as关键字给导入模块设置对象名。(类似与SQL的设置别名)

    • 使用from关键字填写导入模块的地址。

放置最后仅是确保导出生效。

temp.js

const title="张三自传";

function fun() {
    console.log("张三开心的嘞");
}

class Person  {
    constructor() {
        console.log("张三构造器")
    }
    say(){
        console.log("张三的say方法");
    }
}
//可以是无序的
export {Person,title}

app.js

//可以使用解构表达式,但名一定要相同
import {title,Person}  from "./temp.js";
//可以有多个import
import * as zs from "./temp.js";

let p1=new Person();//张三构造器
console.log(title);//张三自传

let p2=new zs.Person();//张三构造器
console.log(zs.title);//张三自传

解构表达式使用{ }表示对象,使用[ ]表示数组

默认导出

  • 在外部模块temp.js最后,使用export+default关键字选择一个导出,唯一

  • 在导入模块app.js中

    • 看注释

放置最后仅是确保导出生效。

temp.js

const title="张三自传";

function fun() {
    console.log("张三开心的嘞");
}

class Person  {
    constructor() {
        console.log("张三构造器")
    }
    say(){
        console.log("张三的say方法");
    }
}

//默认导出title
export default title;

app.js

//常规导入
import * as zs from "./temp.js";

//因为default本身是JS中的关键字了,需要使用解构表达式
import {default as z} from "./temp.js";
//等价于使用解构表达式{default as t}
import t from "./temp.js";

console.log(zs.default);//张三自传

console.log(z.default);//undefined
console.log(z);//张三自传

console.log(t);//张三自传

三种导出混写

temp.js

//分别导出title
export const title = "张三自传";

function fun() {
    console.log("张三开心的嘞");
}

class Person {
    constructor() {
        console.log("张三构造器")
    }

    say() {
        console.log("张三的say方法");
    }
}

//统一导出Person
export {Person}
//默认导出fun()
export default fun();

app.js

import * as z from "./temp.js";
import {title,Person} from "./temp.js";
import {default as t}  from "./temp.js";


console.log(title);
t;
let p1=new Person();
p1.say();
console.log(z.title);
let p2=new z.Person();
p2.say();

image
默认导出被第一个调用了,在中间新增z.default或者z.default()或者z都无法在控制台看见方法fun(),所以个人建议默认导出最好不用

标签:ES6,Java,log,temp,title,张三,js,console,第三十三
From: https://www.cnblogs.com/rowbed/p/18063231

相关文章

  • java8特性-函数式接口
    什么是函数式接口?只包含一个抽象方法的接口,称为函数式接口检验方法:  Java内置的4大核心函数式接口消费型接口Consumer<T>voidaccept(Tt)供给型接口Supplier<T>Tget()函数型接口Function(T,R)Rapply(Tt)断定型接口Predicate<T>booleantest(Tt)......
  • JAVA使用DFA算法过滤敏感词
    代码示例如下:importcn.hutool.core.collection.CollUtil;importcn.hutool.core.util.ReUtil;importcn.hutool.core.util.StrUtil;importcom.google.common.collect.Lists;importcom.google.common.collect.Maps;importjava.util.*;publicclassSensitiveWordUtils......
  • Java登陆第三十三天——ES6(二)浅拷贝、深拷贝;
    对象的拷贝,就是复制一个已有对象的方式。JS中对象的拷贝<script>console.log("1.浅拷贝,对象仅拷贝引用地址,基本类型拷贝的是值");letdoor1=["木门"];letdoor2=door1;//浅拷贝仅仅是拷贝引用地址door2[0]="铁门";console.log(door1);//['铁门']......
  • Java入门(向世界呐喊、Java运行机制、IDEA)
    Java入门1.HelloWorld!(向世界呐喊)新建文件夹用于存放代码(Code)->新建Java文件(Hello.java)->使用Notepad++进行编辑->在当前路径打开CMDpublicclassHello{ publicstaticvoidmain(String[]args){ System.out.print("HelloWorld!"); }}注意:系统可能没有显示文件......
  • Java并发编程之CAS原理分析
    Java并发编程之CAS原理分析在并发编程中,我们经常需要处理多线程对共享资源的访问和修改。那么如何解决并发安全呢?一.解决并发安全问题的方案最粗暴的方式就是使用synchronized关键字了,但它是一种独占形式的锁,属于悲观锁机制,性能会大打折扣。olatile貌似也是一个不错的选择,......
  • Maxwell启动问题java.lang.RuntimeException: error: unhandled character set ‘utf8
    使用Maxwell碰到问题,查看日志后显示大概是这个问题java.lang.RuntimeException:error:unhandledcharacterset‘utf8mb3‘。网上查找,看了经验贴https://blog.csdn.net/weixin_44943845/article/details/126860077,知道原因是这个:但是不太想重新下载源码进行打包,于是决定按......
  • Java登陆第三十三天——ES6(二)reset、spread、Class类语法糖
    所谓ECMAScript6也就是JS6。这次更新带来了大量的新特性,使JS代码更简洁,更强大。复习JS请走:JS入门JS6文档请走:JS6菜鸟教程reset同Java中的可变参数。publicstaticvoidtell(String...info){System.out.println(info);}在JS中,叫做reset因为箭头函数中......
  • java8特性-lambda表达式
    Lambda表达式的使用1.举例:(o1,o2)->Integer.compare(o1,o2);格式:->:lambda操作符或箭头操作符->左边:lambda形参列表(其实就是接口中的抽象方法的形参列表)->右边:labbda体(其实就是重写抽象方法中的方法体)3.lambda表达式的使用:(分为六种情况)方式一:无参,无返回值......
  • JavaEE35个系统源码
    01.基于javaEE_大学生就业信息管理系统设计与实现02.基于javaEE_企业车辆管理系统设计与实现03.基于javaEE_BS架构微博系统设计与实现04.基于javaEE健康管理系统设计与实现05.基于javaEE_医院在线挂号系统设计与实现06.基于javaEE_商品供应管理系统设计与实现07.基于javaEE_......
  • 面试准备不充分,被Java守护线程干懵了,面试官主打一个东西没用但你得会
    写在开头面试官:小伙子请聊一聊Java中的精灵线程?我:什么?精灵线程?啥时候精灵线程?面试官:精灵线程没听过?那守护线程呢?我:守护线程知道,就是为普通线程服务的线程嘛。面试官:没了?守护线程的特点,怎么使用,需要注意啥,Java中经典的守护线程都有啥?我:不知道。。。这的天,面试一个10K的工作,......