1# 使用JSVM-API接口进行Well-known symbols相关开发 2<!--Kit: NDK Development--> 3<!--Subsystem: arkcompiler--> 4<!--Owner: @yuanxiaogou; @string_sz--> 5<!--Designer: @knightaoko--> 6<!--Tester: @test_lzz--> 7<!--Adviser: @fang-jinxu--> 8 9## 简介 10 11JSVM-API中Well-known symbols相关接口可以通过不同API直接获取对应的11个Well-known symbols。 12 13## 基本概念 14 15在JSVM-API中,Well-known symbols相关接口能够给用户提供快速获取对应的11个Well-known symbols的能力。 16 17## 接口说明 18 19| 接口 | 功能说明 | 20|----------------------------------------|--------------------------------| 21| OH_JSVM_GetSymbolToStringTag | 等价于JS中的Symbol.toStringTag。 | 22| OH_JSVM_GetSymbolToPrimitive | 等价于JS中的Symbol.toPrimitive。 | 23| OH_JSVM_GetSymbolSplit | 等价于JS中的Symbol.split。 | 24| OH_JSVM_GetSymbolSearch | 等价于JS中的Symbol.search。 | 25| OH_JSVM_GetSymbolReplace | 等价于JS中的Symbol.replace。 | 26| OH_JSVM_GetSymbolMatch | 等价于JS中的Symbol.match。 | 27| OH_JSVM_GetSymbolIsConcatSpreadable | 等价于JS中的Symbol.isConcatSpreadable。 | 28| OH_JSVM_GetSymbolHasInstance | 等价于JS中的Symbol.hasInstance。 | 29| OH_JSVM_GetSymbolUnscopables | 等价于JS中的Symbol.unscopables。 | 30| OH_JSVM_GetSymbolAsyncIterator | 等价于JS中的Symbol.asyncIterator。 | 31| OH_JSVM_GetSymbolIterator | 等价于JS中的Symbol.iterator。 | 32 33## 使用示例 34 35参考[使用JSVM-API实现JS与C/C++语言交互开发流程](use-jsvm-process.md)中的JSVM-API接口开发流程,本文仅展示接口对应的C++代码。 36 37### 使用接口获取Well-known symbols(以OH_JSVM_GetSymbolToStringTag为例) 38 39cpp部分代码: 40 41```cpp 42#include <string> 43 44static JSVM_Value WellKnownSymbols(JSVM_Env env, JSVM_CallbackInfo info) { 45 JSVM_VM vm; 46 OH_JSVM_GetVM(env, &vm); 47 48 JSVM_HandleScope handleScope; 49 OH_JSVM_OpenHandleScope(env, &handleScope); 50 std::string src = R"JS(Symbol.toStringTag)JS"; 51 JSVM_Value jsSrc; 52 JSVM_Script script; 53 JSVM_Value result1; 54 55 OH_JSVM_CreateStringUtf8(env, src.c_str(), JSVM_AUTO_LENGTH, &jsSrc); 56 OH_JSVM_CompileScript(env, jsSrc, nullptr, 0, true, nullptr, &script); 57 OH_JSVM_RunScript(env, script, &result1); 58 JSVM_Value result2; 59 OH_JSVM_GetSymbolToStringTag(env, &result2); 60 bool is_equals = false; 61 OH_JSVM_StrictEquals(env, result1, result2, &is_equals); 62 OH_LOG_INFO(LOG_APP, "JSVM OH_JSVM_GetSymbolToStringTag result is correct : %{public}d\n", is_equals); 63 OH_JSVM_CloseHandleScope(env, handleScope); 64 65 return nullptr; 66} 67 68static JSVM_CallbackStruct param[] = { 69 {.data = nullptr, .callback = WellKnownSymbols}, 70}; 71 72static JSVM_CallbackStruct *method = param; 73 74// wellKnownSymbols方法别名,供JS调用 75static JSVM_PropertyDescriptor descriptor[] = { 76 {"wellKnownSymbols", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT}, 77}; 78 79// 样例测试JS 80const char *srcCallNative = R"JS(wellKnownSymbols();)JS"; 81 82``` 83 84预期输出: 85``` 86JSVM OH_JSVM_GetSymbolToStringTag result is correct : 1 87``` 88