• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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