往期鸿蒙全套实战文章必看:
简介
使用Node-API接口获取和设置ArkTS对象的属性。通过合理使用这些函数,实现更复杂的功能和逻辑。
基本概念
在ArkTS对象属性的相关开发中,需要处理ArkTS对象属性,确保正确地访问、设置、删除属性,并了解属性的继承关系和枚举特性。以下是一些关键概念:
- 对象(Object):在ArkTS中,对象是一种复合数据类型,它允许存储多个不同类型的值作为一个单独的实体。对象是属性和方法的集合。属性是与对象相关联的值,而方法则是对象可以执行的操作。
- 属性(Property):在ArkTS中,属性是对象特征的键值对。每个属性都有一个名字(也称为键或标识符)和一个值。属性的值可以是任意数据类型,包括基本类型、对象和函数。
- 可枚举属性(EnumerableProperty):在ArkTS中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的,即内部 “可枚举” 标志设置为true或false。可枚举性决定了这个属性能否被 for...in 查找遍历到。
- 自有属性(OwnProperty):自有属性直接定义在对象上的属性,而不是从原型链上继承来的属性。
场景和功能介绍
以下Node-API接口提供了对ArkTS对象属性的基本操作,包括设置、获取、删除和检查属性是否存在。使用场景如下:
接口 | 描述 |
---|---|
napi_get_property_names | 在进行对象操作或调试时,有时需要获取对象的属性和属性名。此接口可以帮助提取对象的属性名,用于动态获取对象的属性信息的场景。 |
napi_set_property | 通过此接口可以动态地向对象添加属性。也可修改对象的属性值,满足动态属性值变更的需求。 |
napi_get_property | 在调用Node-API模块的函数或方法时,可能需要将ArkTS对象的属性值作为参数传递。通过此接口可以获取属性值,并将其传递给其他函数进行处理。 |
napi_has_property | 在进行属性访问之前,通常需要先检查对象中是否存在指定的属性。通过调用此接口可以判断给定对象是否包含特定的属性,从而避免访问不存在属性导致的异常或错误。 |
napi_delete_property | 在需要删除一个ArkTS对象上的某个属性时,可以使用这个函数。 |
napi_has_own_property | 在需要检查一个ArkTS对象是否直接拥有(而不是从其原型链上继承)某个属性时,可以使用这个函数。 |
napi_set_named_property | 在需要将一个值赋给ArkTS对象的命名属性时,可以使用这个函数。 |
napi_get_named_property | 在需要从ArkTS对象中获取一个命名属性的值时,可以使用这个函数。 |
napi_has_named_property | 在需要检查一个ArkTS对象是否包含某个命名属性时,可以使用这个函数。 |
napi_define_properties | 当需要在指定Object中自定义属性,并从ArkTS中访问和操作这些属性时,可以使用这个函数。 |
napi_get_all_property_names | 当需要遍历一个对象的所有属性,并对其进行处理时,可以使用此接口获取所有属性名称的数组,然后检查数组中是否包含特定的属性名。 |
使用示例
本文仅对接口对应C++及ArkTS相关代码进行展示。
napi_get_property_names
以字符串数组的形式获取对象的可枚举属性的名称。
cpp部分代码
#include "napi/native_api.h"
static napi_value GetPropertyNames(napi_env env, napi_callback_info info)
{
// 解析ArkTS的传参
size_t argc = 1;
napi_value args[1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
// 以字符串数组的形式获取对象的可枚举属性的名称,以result传出
napi_value result;
napi_status status = napi_get_property_names(env, args[0], &result);
if (status != napi_ok)