Javascript 通过一系列文件了解ES6中的导入/导出
当我有3个文件时,我在理解导出/导入机制方面有点困难,每个文件都包括上一个文件 例如:Javascript 通过一系列文件了解ES6中的导入/导出,javascript,ecmascript-6,Javascript,Ecmascript 6,当我有3个文件时,我在理解导出/导入机制方面有点困难,每个文件都包括上一个文件 例如: //fileA.js: export default MyClass {} //fileB.js: import MyClass from './fileA.js'; //fileC.js: import './fileB.js'; 我的期望是,MyClass可以在fileC中使用,但看起来情况并非如此。你能给我一些建议吗?请按照下面的建议做: //fileA.js: export default My
//fileA.js:
export default MyClass {}
//fileB.js:
import MyClass from './fileA.js';
//fileC.js:
import './fileB.js';
我的期望是,MyClass
可以在fileC中使用,但看起来情况并非如此。你能给我一些建议吗?请按照下面的建议做:
//fileA.js:
export default MyClass {}
//fileB.js:
export { default as MyClass } from './fileA'
//fileC.js:
import { MyClass } from './fileB'
当您导入这样的模块时:
//fileC.js:
import './fileB.js';
它实际上并不导入任何值。它将在该模块中执行全局代码以产生副作用,但不会导入值本身。为了完成您想做的事情,您需要在每个要使用模块值的文件中导入模块值
请参见以下代码中的:
//fileA.js:
export default MyClass {}
//fileB.js:
import MyClass from './fileA.js';
//fileC.js:
import './fileB.js';
Myclass
仅在fileB中可用,因为这是直接导入的。您的第3行代码不会加载到fileA中。仅仅因为FileA加载在FileB中并不意味着当我们在FileC中导入B时,依赖关系会被转移
为了使其可用,我们必须像在文件B中一样在文件C中再次导入它:
import MyClass from './fileA.js';
其他导入
导出
语法:
当一个文件导出多个内容(前面没有默认值)时,我们可以使用命名导出将其导入,例如:
export class1 {}
export class2 {}
我们正在导出2个类,我们可以使用以下语法导入它们:
import {class1, class2} from './fileA.js';
请记住,名称现在必须与导出的名称匹配,在本例中为class1
和class2
我们还可以通过以下方式导入文件的所有导出:
import * as classes from './fileA.js';
classes.class1 // the way to access class1
此语法将所有导出放在一个对象上,我们可以确定该对象的名称(在
as
关键字之后)。然后,我们可以像通常访问对象的属性一样访问导出。可能的重复,因此在fileC中,我需要手动指定所有导入的实体?是的,您可以使用逗号导入它们:{Class1,Class2,Class3}