gpt4 book ai didi

javascript - 如何在 es6 中导入本身需要在导入之前调用/初始化其函数/类的模块

转载 作者:数据小太阳 更新时间:2023-10-29 05:45:08 26 4
gpt4 key购买 nike

我想知道将模块的函数/类导入另一个模块的最佳做法是什么,模块本身需要在导入另一个模块之前调用/初始化自己的函数/类?我不知道我是否可以清楚地问我的问题!因此,让我们举个例子。

这是我的模块:

// myModule.js
class MyModule {
constructor() {
// do sth
}
}

let myModule = new MyModule();

这就是我喜欢将它导入另一个模块的方式:

import MyModule from './myModule';

这实际上工作得很好!但如您所见,在 myModule.js 文件中,我没有export default 我的 MyModule 类,因为那不是唯一的东西发生在 myModule.js 文件中!我也在定义它之后初始化类......(我知道即使我将我的类设置为 export default 初始化仍然可以正常工作,而模块被导入其他地方...... )

因此,如果不在我们的模块中设置任何导出的内容,或者将类设置为 export default,当模块被导入到其他地方时一切正常......到目前为止一切顺利!但我正在寻找最佳实践(如果有的话)!

所以这是我关于此类情况的问题:

  1. 可以导入一个没有任何导出的模块吗?
  2. 我们是否应该将类设置为默认导出,尽管我们在模块中的类之外做了更多工作(定义类后发生的初始化工作)?
  3. 或者在另一个函数中完成初始化工作,然后导出类和函数,然后调用该函数在导入的模块中完成初始化工作是否好?

非常感谢大家!我非常感谢对此的任何帮助:)

最佳答案

提议导入该类或其实例怎么样?喜欢:

// export class itself
export class MyModule {
constructor() {
// do sth
}
}

// export instance of MyModule directly
export default new MyModule();

// export a factory function if you need more work to be done
// before the instance is created
export function myModuleFactory(...args) { // define e.g. arguments to be passed to constructor
// ... do stuff
const myModule = new MyModule(...args);
// ... do more stuff
return myModule;
}

所以你可以这样做:

// import instance
import instance from './myModule';
// or class
import { MyModule } from './myModule';
// or import factory
import { myModuleFactory } from './myModule';

做什么,取决于你想用你的模块完成什么。如果您希望您的应用程序使用 MyModule 类对象的一个​​共享实例,您可以exportimport 实例,如上所示。如果您想在不同的上下文中创建多个实例,您可以导出类本身或工厂函数以返回一个新实例。

为了让它更干净,您可以将该类保存在另一个单独的文件中,并将其导入到提供工厂/实例化的模块中。

更新

回答您的第一个问题:您可以import 没有定义任何export 的模块。该模块将被加载并执行其逻辑。问题是,只要它不会改变全局变量(如 Web 开发中的 window),它就不会产生任何影响,因为模块内的所有内容都发生在一个隔离的范围内。正如您可能已经猜到的那样,让模块更改全局变量远非最佳实践。

关于javascript - 如何在 es6 中导入本身需要在导入之前调用/初始化其函数/类的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38980825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com