HarmonyOS鸿蒙Next中关于模块导出,为什么要new?

HarmonyOS鸿蒙Next中关于模块导出,为什么要new?

1 定义class时已经export

为什么还需要写下方的代码?

export class MainViewModel {/*省略代码*/}

为什么还需要写下方的代码?

export default new MainViewModel();

2 引用模块

import mainViewModel from '../viewmodel/MainViewModel';
7 回复

关键区别

  • 导出的是类的‘定义’(相当于一个模板),其他文件导入后需自己 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. 有序列表项1
  2. 有序列表项2
  3. 有序列表项3

在HarmonyOS Next中,模块导出使用new是为了创建模块的独立实例,确保每个导入模块的组件获得全新对象,避免状态共享导致的冲突。ArkTS语言规范要求类实例化必须显式使用new,这与JavaScript的模块系统设计一致。模块导出的是类定义而非单例,通过new可灵活初始化不同配置的实例,符合鸿蒙的隔离架构原则。

在HarmonyOS Next中,这两种导出方式有不同的用途:

  1. export class MainViewModel 只是导出了类定义,使用时需要自己实例化:
import { MainViewModel } from '../viewmodel/MainViewModel';
const vm = new MainViewModel();
  1. export default new MainViewModel() 是直接导出一个已经实例化的单例对象,使用时直接引用这个实例:
import mainViewModel from '../viewmodel/MainViewModel';
// 直接使用mainViewModel,不需要new

第一种方式更灵活,适合需要多个实例的场景;第二种方式适合全局单例场景。根据你的业务需求选择合适的导出方式即可。

回到顶部