HarmonyOS鸿蒙Next中关于模块导出,为什么要new?
HarmonyOS鸿蒙Next中关于模块导出,为什么要new?
1 定义class时已经export
为什么还需要写下方的代码?
export class MainViewModel {/*省略代码*/}
为什么还需要写下方的代码?
export default new MainViewModel();
2 引用模块
import mainViewModel from '../viewmodel/MainViewModel';
关键区别
-
导出的是类的‘定义’(相当于一个模板),其他文件导入后需自己
new
才能创建实例,每次new
都是独立对象。 -
导出的是类的‘实例’(预先创建好的对象),其他文件导入时直接用这个现成实例,全局唯一(单例)也就是1楼说的在不同代码块中引用这个MainViewModel时,调用的就是拥有相同值的同一个类。
想了解更多的话建议看一下‘设计模式’
更多关于HarmonyOS鸿蒙Next中关于模块导出,为什么要new?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
标题
这是段落一。
这是段落二。
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17
new 是实例化,相当于是创建一个实例以后,导出这个实例,这样在不同代码块中引用这个 MainViewModel 时,调用的就是拥有相同值的同一个类。
标题
这是第一段内容。
这是第二段内容。
列1 | 列2 |
---|---|
表格数据1 | 表格数据2 |
表格数据3 | 表格数据4 |
- 项目1
- 项目2
- 项目3
- 有序列表项1
- 有序列表项2
- 有序列表项3
在HarmonyOS Next中,模块导出使用new
是为了创建模块的独立实例,确保每个导入模块的组件获得全新对象,避免状态共享导致的冲突。ArkTS语言规范要求类实例化必须显式使用new
,这与JavaScript的模块系统设计一致。模块导出的是类定义而非单例,通过new
可灵活初始化不同配置的实例,符合鸿蒙的隔离架构原则。
在HarmonyOS Next中,这两种导出方式有不同的用途:
export class MainViewModel
只是导出了类定义,使用时需要自己实例化:
import { MainViewModel } from '../viewmodel/MainViewModel';
const vm = new MainViewModel();
export default new MainViewModel()
是直接导出一个已经实例化的单例对象,使用时直接引用这个实例:
import mainViewModel from '../viewmodel/MainViewModel';
// 直接使用mainViewModel,不需要new
第一种方式更灵活,适合需要多个实例的场景;第二种方式适合全局单例场景。根据你的业务需求选择合适的导出方式即可。