• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 使用JSVM-API接口进行Wrapper object相关开发
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中,装箱类型(Wrapper object)判断相关接口支持通过不同API快速判断object的装箱类型。
12
13## 基本概念
14
15在JSVM-API中,装箱类型相关接口提供快速判断5种装箱类型的能力。
16
17## 接口说明
18
19| 接口                                    | 功能说明                       |
20|----------------------------------------|--------------------------------|
21| OH_JSVM_IsNumberObject            | 判断是否是Number Object。  |
22| OH_JSVM_IsBooleanObject           | 判断是否是Boolean Object。  |
23| OH_JSVM_IsBigIntObject            | 判断是否是BigInt Object。   |
24| OH_JSVM_IsStringObject            | 判断是否是String Object。   |
25| OH_JSVM_IsSymbolObject            | 判断是否是Symbol Object。   |
26
27## 使用示例
28
29JSVM-API接口开发流程参考[使用JSVM-API实现JS与C/C++语言交互开发流程](use-jsvm-process.md),本文仅展示接口对应的C++代码。
30
31### 使用接口判断是否是Number Object
32
33cpp部分代码:
34
35```cpp
36#include <string>
37
38static JSVM_Value WrapperObject(JSVM_Env env, JSVM_CallbackInfo info) {
39    JSVM_VM vm;
40    OH_JSVM_GetVM(env, &vm);
41
42    JSVM_HandleScope handleScope;
43    OH_JSVM_OpenHandleScope(env, &handleScope);
44    std::string src = R"JS(new Number(42))JS";
45    JSVM_Value jsSrc;
46    JSVM_Script script;
47    JSVM_Value result;
48
49    OH_JSVM_CreateStringUtf8(env, src.c_str(), JSVM_AUTO_LENGTH, &jsSrc);
50    OH_JSVM_CompileScript(env, jsSrc, nullptr, 0, true, nullptr, &script);
51    OH_JSVM_RunScript(env, script, &result);
52    bool isNumberObject = false;
53    OH_JSVM_IsNumberObject(env, result, &isNumberObject);
54    OH_LOG_INFO(LOG_APP, "JSVM OH_JSVM_IsNumberObject: %{public}d\n", isNumberObject);
55    OH_JSVM_CloseHandleScope(env, handleScope);
56
57    return nullptr;
58}
59
60static JSVM_CallbackStruct param[] = {
61    {.data = nullptr, .callback = WrapperObject},
62};
63
64static JSVM_CallbackStruct *method = param;
65
66// wrapperObject方法别名,供JS调用
67static JSVM_PropertyDescriptor descriptor[] = {
68    {"wrapperObject", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT},
69};
70
71// 样例测试JS
72const char *srcCallNative = R"JS(wrapperObject();)JS";
73
74```
75
76预期输出:
77```
78JSVM OH_JSVM_IsNumberObject: 1
79```
80