harmony 鸿蒙使用JSVM-API接口进行Wellknown symbols相关开发

  • 2025-06-12
  • 浏览 (4)

使用JSVM-API接口进行Wellknown symbols相关开发

简介

JSVM-API中Well-known symbols相关接口可以通过不同API直接拿到对应的11个Well-known symbols。

基本概念

在JSVM-API中,Well-known symbols相关接口能够给用户提供快速获取对应的11个Well-known symbols的能力。

接口说明

接口 功能说明
OH_JSVM_GetSymbolToStringTag 等价于JS中的Symbol.toStringTag。
OH_JSVM_GetSymbolToPrimitive 等价于JS中的Symbol.toPrimitive。
OH_JSVM_GetSymbolSplit 等价于JS中的Symbol.split。
OH_JSVM_GetSymbolSearch 等价于JS中的Symbol.search。
OH_JSVM_GetSymbolReplace 等价于JS中的Symbol.replace。
OH_JSVM_GetSymbolMatch 等价于JS中的Symbol.match。
OH_JSVM_GetSymbolIsConcatSpreadable 等价于JS中的Symbol.isConcatSpreadable。
OH_JSVM_GetSymbolHasInstance 等价于JS中的Symbol.hasInstance。
OH_JSVM_GetSymbolUnscopables 等价于JS中的Symbol.unscopables。
OH_JSVM_GetSymbolAsyncIterator 等价于JS中的Symbol.asyncIterator。
OH_JSVM_GetSymbolIterator 等价于JS中的Symbol.iterator。

使用示例

JSVM-API接口开发流程参考使用JSVM-API实现JS与C/C++语言交互开发流程,本文仅对接口对应C++相关代码进行展示。

使用接口获取Well-known symbols(以OH_JSVM_GetSymbolToStringTag为例)

cpp部分代码

#include <string>

static JSVM_Value WellKnownSymbols(JSVM_Env env, JSVM_CallbackInfo info) {
    JSVM_VM vm;
    OH_JSVM_GetVM(env, &vm);

    JSVM_HandleScope handleScope;
    OH_JSVM_OpenHandleScope(env, &handleScope);
    std::string src = R"JS(Symbol.toStringTag)JS";
    JSVM_Value jsSrc;
    JSVM_Script script;
    JSVM_Value result1;

    OH_JSVM_CreateStringUtf8(env, src.c_str(), JSVM_AUTO_LENGTH, &jsSrc);
    OH_JSVM_CompileScript(env, jsSrc, nullptr, 0, true, nullptr, &script);
    OH_JSVM_RunScript(env, script, &result1);
    JSVM_Value result2;
    OH_JSVM_GetSymbolToStringTag(env, &result2);
    bool is_equals = false;
    OH_JSVM_StrictEquals(env, result1, result2, &is_equals);
    OH_LOG_INFO(LOG_APP, "JSVM OH_JSVM_GetSymbolToStringTag result is correct : %{public}d\n", is_equals);
    OH_JSVM_CloseHandleScope(env, handleScope);

    return nullptr;
}

static JSVM_CallbackStruct param[] = {
    {.data = nullptr, .callback = WellKnownSymbols},
};

static JSVM_CallbackStruct *method = param;

// wellKnownSymbols方法别名,供JS调用
static JSVM_PropertyDescriptor descriptor[] = {
    {"wellKnownSymbols", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT},
};

// 样例测试JS
const char *srcCallNative = R"JS(wellKnownSymbols();)JS";

预期输出

JSVM OH_JSVM_GetSymbolToStringTag result is correct : 1

你可能感兴趣的鸿蒙文章

harmony 鸿蒙napi

harmony 鸿蒙使用命令行CMake构建NDK工程

harmony 鸿蒙使用DevEco Studio模板构建NDK工程

harmony 鸿蒙NDK工程构建概述

harmony 鸿蒙在NDK工程中使用预构建库

harmony 鸿蒙C/C++标准库机制概述

harmony 鸿蒙CPU特性

harmony 鸿蒙创建NDK工程

harmony 鸿蒙C/C++内存错误检测

harmony 鸿蒙通过DevEco Studio调试

0  赞