鸿蒙暂未归类知识记录

获取对象类名

概述

在鸿蒙应用开发中,可以使用 constructor.name 获取对象类名,但需要注意它在不同使用场景下的可靠性。下面是主要的结论和替代方案汇总:

场景与对象类型 constructor.name 的可靠性 说明与替代方案
ArkTS 普通类对象 (如 class MyClass) 可靠 这是其标准用法,能准确返回类名字符串。
ArkUI 自定义组件实例 (被 @Component 装饰的 struct) ⚠️ 可能不可靠或无效 鸿蒙对自定义组件的编译处理可能导致元信息丢失,使其返回空字符串或无效值。
页面入口组件实例 (被 @Entry 装饰的 struct) ⚠️ 可能不可靠或无效 同自定义组件,也受编译处理影响,可靠性差。

替代方案与关键注意事项

如果你在为自定义组件获取类名时遇到问题,可以考虑以下可靠的方案:

  1. 显式定义静态属性 :在组件内部定义一个静态字符串属性(如 static className = 'MyComponent';),这是最稳定可控的方法。

  2. 使用 Object.prototype.toString :通过 Object.prototype.toString.call(this).slice(8, -1) 获取类型字符串,但返回的格式可能与预期不同。

  3. 在方法中直接返回类名字符串:对于已知的组件,直接在方法里返回固定的类名字符串。

此外,还需注意:

  • 代码压缩/混淆的影响 :如果项目启用了代码压缩,constructor.name 可能会被重命名,导致其值在运行时发生变化。

  • 继承场景 :在继承关系中,this.constructor.name 返回的是子类的类名,而非父类类名。

总的来说,如果开发中需要稳定地获取一个UI组件的"标识",最佳实践是显式定义一个静态属性 ,而不是依赖可能不稳定的 constructor.name

相关推荐
wangxiaowu198621 小时前
HarmonyOS NEXT和通用JSBridge
华为·harmonyos
cz追天之路1 天前
华为机考 ------ 识别有效的IP地址和掩码并进行分类统计
javascript·华为·typescript·node.js·ecmascript·less·css3
航Hang*1 天前
第五章:网络系统建设与运维(中级)——生成树协议
运维·服务器·网络·笔记·华为·ensp
航Hang*1 天前
第三章:网络系统建设与运维(中级)——交换技术
运维·笔记·计算机网络·华为·ensp·交换机
l134062082351 天前
Flutter Geocoding 在鸿蒙上的使用指南
flutter·华为·harmonyos
无人装备硬件开发爱好者1 天前
华为海思 BS21E (H2821E) 星闪组网测距定位 技术可行性方案
华为·最小二乘法·星闪·测距定位
俩毛豆1 天前
【毛豆工具集】【UI】【多设备适配】实现与屏幕密度等倍的图片加载
华为·harmonyos
l134062082351 天前
344.在鸿蒙上使用 animations Flutter 包的指南
flutter·华为·harmonyos
灯前目力虽非昔,犹课蝇头二万言。1 天前
HarmonyOS笔记12:生命周期
笔记·华为·harmonyos
Random_index1 天前
#HarmonyOS篇:学习UI规范基本语法&&学习UI范式装填管理V1&&学习UI范式装填管理V2&&学习UI范式渲染控制
harmonyos