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