摘要: 本教程将教你如何使用 JavaScript 导入关键字从另一个模块导入变量、函数和类。
JavaScript 导入关键字简介
ES6 模块允许您将 JavaScript 代码结构化为模块并在它们之间共享值(变量、函数、类等)。
要从模块导入值,请使用import
关键字。此外,您需要将 JavaScript 源文件加载为模块。在 HTML 中,您可以通过在 script 标签中指定type="module"
来实现。
<script type="module" src="app.js"></script>
Code language: JavaScript (javascript)
我们将以一个简单的例子来说明如何使用import
关键字。
假设我们有一个具有以下结构的项目
├── index.html
└── js
├── app.js
└── greeting.js
Code language: JavaScript (javascript)
在这个项目中,index.html
将app.js
加载为一个模块
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JavaScript import</title>
</head>
<body>
<script src="js/app.js" type="module"></script>
</body>
</html>
Code language: JavaScript (javascript)
greeting.js
模块有一个函数sayHi()
函数,用于显示一条消息。它将sayHi()
函数导出为默认导出
export default function sayHi() {
alert('Hi');
}
Code language: JavaScript (javascript)
app.js
将从greeting.js
模块导入sayHi()
方法并执行它。
导入默认导出
如果一个模块使用默认导出,您可以使用以下语法从该模块导入默认导出
import name from 'module.js';
Code language: JavaScript (javascript)
例如,您可以将sayHi()
函数从greeting.js
模块导入到app.js
模块,如下所示
import sayHi from './greeting.js';
sayHi();
Code language: JavaScript (javascript)
如果您在 Web 浏览器中打开index.html
,您将看到一条警报消息。
因为sayHi()
函数是默认导出,所以您可以在导入时为它分配任何您想要的名称。
例如,您可以从greeting.js
模块导入sayHi
函数,并将其名称设置为displayGreeting()
,如下所示
import displayGreeting from './greeting.js';
displayGreeting();
Code language: JavaScript (javascript)
导入命名导出
与导入默认导出不同,您需要在将命名导出导入到模块时指定其确切名称。此外,您需要将命名导出放在一对花括号内。
以下是导入命名导出的语法
import { namedExport1, namedExport2} from 'module.js';
Code language: JavaScript (javascript)
例如,我们可以修改包含两个命名导出的greeting.js
模块
export function sayHi() {
alert('Hi');
}
export function sayBye() {
alert('Bye');
}
Code language: JavaScript (javascript)
要将sayHi()
和sayBye()
函数导入到app.js
模块,请使用以下代码
import { sayHi, sayBye } from './greeting.js';
Code language: JavaScript (javascript)
您也可以调用这些函数
import { sayHi, sayBye } from './greeting.js';
sayHi();
sayBye();
Code language: JavaScript (javascript)
如果您在 Web 浏览器中打开index.html
,您将看到由这两个函数创建的两个警报。
命名空间导入
模块命名空间对象是一个静态对象,其中包含来自模块的所有导出。它是一个静态对象,JavaScript 在评估模块时创建它。
要访问模块命名空间对象,请使用以下语法
import * as name from 'module.js';
Code language: JavaScript (javascript)
在此语法中,name
是模块命名空间对象,它包含来自module.js
模块的所有导出作为属性。
例如,如果modules.js
具有myVariable
、myFunction
和myClass
命名导出,您可以通过name
对象访问它们,如下所示
name.myVariable
name.myFunction
name.myClass
Code language: JavaScript (javascript)
为了说明命名空间导入的工作原理,我们可以将app.js
更改为使用命名空间导入,如下所示
import * as greeting from './greeting.js';
greeting.sayHi();
greeting.sayBye();
Code language: JavaScript (javascript)
以下将greeting
指定为模块命名空间对象
import * as greeting from './greeting.js';
Code language: JavaScript (javascript)
一旦我们有了模块命名空间对象,我们就可以调用sayHi()
和sayBye()
函数
greeting.sayHi();
greeting.sayBye();
Code language: JavaScript (javascript)
如果导入模块具有默认导出,则可以通过default
关键字访问它
name.default
Code language: JavaScript (javascript)
例如,我们可以将greeting.js
模块中的sayHi
函数更改为默认导出
export default function sayHi() {
alert('Hi');
}
export function sayBye() {
alert('Bye');
}
Code language: JavaScript (javascript)
并将导出从greeting.js
模块导入到app.js
模块,使用命名空间导入
import * as greeting from './greeting.js';
greeting.default(); // sayHi()
greeting.sayBye();
Code language: JavaScript (javascript)
在这种情况下,我们可以通过上面的default()
调用sayHi()
函数。请注意,您无法使用像这样使用其名称来访问sayHi()
函数
greeting.sayHi();
Code language: JavaScript (javascript)
如果您这样做,您将收到以下错误
Uncaught TypeError: greeting.sayHi is not a function
Code language: JavaScript (javascript)
重命名命名导出
当您导入命名导出时,您可以为它分配一个新名称。当您从不同的模块导入具有相同名称的函数时,这很有用
import { name as name1 } from "module1.js";
import { name as name2 } from "module2.js";
Code language: JavaScript (javascript)
例如,以下说明了如何在导入到app.js
模块时将sayHi()
和sayBye()
函数重命名为hi()
和bye()
import { sayHi as hi, sayBye as bye } from './greeting.js';
hi();
bye();
Code language: JavaScript (javascript)
总结
- 使用 JavaScript
import
关键字将变量、函数和类导入到模块中。