鸿蒙暂未归类知识记录

获取对象类名

概述

在鸿蒙应用开发中,可以使用 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。

相关推荐
垆边人似月.7 小时前
华为机试题 :和为 K 的子数组个数
算法·leetcode·华为
程序猿追10 小时前
一次右尾概率实验:statrs4cj 的 CJMP 鸿蒙接入与双端实测
华为·harmonyos
大雷神11 小时前
从一道24点到同屏双人派对:用鸿蒙开发助手起步,复用已有App开发手机元服务
华为·智能手机·harmonyos
song50112 小时前
React Native for OpenHarmony 实战:三方库 react-native-parallax-scroll-view 的鸿蒙化适配指南
分布式·react native·react.js·transformer·harmonyos
贾伟康12 小时前
HarmonyOS ArkUI 日历范围选择不歧义:本地日期键、闭区间与闰日校验
harmonyos·状态机·arkui·闰年·日期范围
song50114 小时前
React Native for OpenHarmony 实战:三方库 react-native-ratings 的鸿蒙化适配指南
javascript·react native·react.js·分类·harmonyos
垆边人似月.14 小时前
华为机试题 :最大数
c++·算法·华为
大雷神15 小时前
用鸿蒙开发助手推进《3D种植》鸿蒙版与 Flame 库适配
3d·华为·harmonyos
轻口味15 小时前
HarmonyOS 7 新特性7:闪控窗深潜——六态流转、错误码二维查表与730ms双通道滞后真机实测
华为·harmonyos·鸿蒙·floatview
程序猿追15 小时前
从 24 到 25 字节:compactstr4cj 的 CJMP 鸿蒙适配与 UTF-8 实测
华为·harmonyos