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