README.md
1# JSNApi接口说明
2
3## ArrayBufferRef
4
5ArrayBufferRef 是一种通用的、固定长度的原始二进制数据缓冲区。它不能直接读取或操作,需要通过类型数组或 DataView 对象来操作其中的数据。
6
7### New
8
9Local<ArrayBufferRef> ArrayBufferRef::New(const EcmaVM *vm, int32_t length);
10
11Local<ArrayBufferRef> ArrayBufferRef::New(const EcmaVM *vm, void *buffer, int32_t length, const NativePointerCallback &deleter, void *data);
12
13创建一个ArrayBuffer对象。
14
15**参数:**
16
17| 参数名 | 类型 | 必填 | 说明 |
18| ------- | --------------- | ---- | --------------------------- |
19| vm | const EcmaVM * | 是 | 虚拟机对象。 |
20| length | int32_t | 是 | 指定的长度。 |
21| buffer | void * | 是 | 指定缓冲区。 |
22| deleter | const NativePointerCallback & | 是 | 删除ArrayBuffer时所作的操作 |
23| data | void * | 是 | 指定数据。 |
24
25**返回值:**
26
27| 类型 | 说明 |
28| --------------------- | -------------------------------- |
29| Local<ArrayBufferRef> | 返回新创建的ArrayBufferRef对象。 |
30
31**示例:**
32
33```C++
34Local<ArrayBufferRef> arrayBuffer1 = ArrayBufferRef::New(vm, 10);
35uint8_t *buffer = new uint8_t[10]();
36int *data = new int;
37*data = 10;
38NativePointerCallback deleter = [](void *env, void *buffer, void *data) -> void {
39 delete[] reinterpret_cast<uint8_t *>(buffer);
40 int *currentData = reinterpret_cast<int *>(data);
41 delete currentData;
42};
43Local<ArrayBufferRef> arrayBuffer2 = ArrayBufferRef::New(vm, buffer, 10, deleter, data);
44```
45
46### GetBuffer
47
48void *ArrayBufferRef::GetBuffer();
49
50获取ArrayBufferRef的原始缓冲区。
51
52**参数:**
53
54| 参数名 | 类型 | 必填 | 说明 |
55| ------ | ---- | ---- | ---- |
56| 无参 | | | |
57
58**返回值:**
59
60| 类型 | 说明 |
61| ------ | ------------------------------------------------ |
62| void * | 返回为void *,使用时需强转为缓冲区创建时的类型。 |
63
64**示例:**
65
66```c++
67uint8_t *buffer = new uint8_t[10]();
68int *data = new int;
69*data = 10;
70NativePointerCallback deleter = [](void *env, void *buffer, void *data) -> void {
71delete[] reinterpret_cast<uint8_t *>(buffer);
72 int *currentData = reinterpret_cast<int *>(data);
73 delete currentData;
74};
75Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm, buffer, 10, deleter, data);
76uint8_t *getBuffer = reinterpret_cast<uint8_t *>(arrayBuffer->GetBuffer());
77```
78
79### ByteLength
80
81int32_t ArrayBufferRef::ByteLength([[maybe_unused]] const EcmaVM *vm);
82
83此函数返回此ArrayBufferRef缓冲区的长度(以字节为单位)。
84
85**参数:**
86
87| 参数名 | 类型 | 必填 | 说明 |
88| ------ | -------------- | ---- | ------------ |
89| vm | const EcmaVM * | 是 | 虚拟机对象。 |
90
91**返回值:**
92
93| 类型 | 说明 |
94| ------- | ------------------------------- |
95| int32_t | 以int32_t类型返回buffer的长度。 |
96
97**示例:**
98
99```c++
100Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm, 10);
101int lenth = arrayBuffer->ByteLength(vm);
102```
103
104### IsDetach
105
106bool ArrayBufferRef::IsDetach();
107
108判断ArrayBufferRef与其缓冲区是否已经分离。
109
110**参数:**
111
112| 参数名 | 类型 | 必填 | 说明 |
113| ------ | -------------- | ---- | ------------ |
114| vm | const EcmaVM * | 是 | 虚拟机对象。 |
115
116**返回值:**
117
118| 类型 | 说明 |
119| ---- | ----------------------------------------- |
120| bool | 缓冲区已经分离返回true,未分离返回false。 |
121
122**示例:**
123
124```C++
125Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm, 10);
126bool b = arrayBuffer->IsDetach();
127```
128
129### Detach
130
131void ArrayBufferRef::Detach(const EcmaVM *vm);
132
133将ArrayBufferRef与其缓冲区分离,并将缓冲区长度置为0。
134
135**参数:**
136
137| 参数名 | 类型 | 必填 | 说明 |
138| ------ | ---- | ---- | ---- |
139| 无参 | | | |
140
141**返回值:**
142
143| 类型 | 说明 |
144| ---- | -------------------------------- |
145| void | 将ArrayBufferRef与其缓冲区分离。 |
146
147**示例:**
148
149```C++
150Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm, 10);
151arrayBuffer->Detach(vm);
152```
153
154
155
156## BooleanRef
157
158Boolean是一个基本数据类型,用于表示真或假。
159
160### New
161
162Local<BooleanRef> BooleanRef::New(const EcmaVM *vm, bool input);
163
164创建一个BooleanRef对象。
165
166**参数:**
167
168| 参数名 | 类型 | 必填 | 说明 |
169| ------ | -------------- | ---- | ---------------------------- |
170| vm | const EcmaVM * | 是 | 虚拟机对象。虚拟机对象。 |
171| input | bool | 是 | 指定BooleanRef对象的bool值。 |
172
173**返回值:**
174
175| 类型 | 说明 |
176| ----------------- | ---------------------------- |
177| Local<BooleanRef> | 返回新创建的BooleanRef对象。 |
178
179**示例:**
180
181```c++
182Local<BooleanRef> boolRef = BooleanRef::New(vm, true);
183```
184
185## BufferRef
186
187用于在数据从一个位置传输到另一个位置时临时存储数据。
188
189### New
190
191Local<BufferRef> BufferRef::New(const EcmaVM *vm, int32_t length);
192
193Local<BufferRef> BufferRef::New(const EcmaVM *vm, void *buffer, int32_t length, const NativePointerCallback &deleter, void *data)
194
195创建一个BufferRef对象。
196
197**参数:**
198
199| 参数名 | 类型 | 必填 | 说明 |
200| ------- | --------------- | ---- | -------------------------------------------------- |
201| vm | const EcmaVM * | 是 | 虚拟机对象。 |
202| length | int32_t | 是 | 指定的长度。 |
203| buffer | void * | 是 | 指定缓冲区 |
204| deleter | const NativePointerCallback & | 是 | 一个删除器对象,用于在不再需要缓冲区时释放其内存。 |
205| data | void * | 是 | 传递给删除器的额外数据。 |
206
207**返回值:**
208
209| 类型 | 说明 |
210| ---------------- | --------------------------- |
211| Local<BufferRef> | 返回新创建的BufferRef对象。 |
212
213**示例:**
214
215```c++
216Local<BufferRef> bufferRef1 = BufferRef::New(vm, 10);
217uint8_t *buffer = new uint8_t[10]();
218int *data = new int;
219*data = 10;
220NativePointerCallback deleter = [](void *env, void *buffer, void *data) -> void {
221 delete[] reinterpret_cast<uint8_t *>(buffer);
222 int *currentData = reinterpret_cast<int *>(data);
223 delete currentData;
224};
225Local<BufferRef> bufferRef2 = BufferRef::New(vm, buffer, 10, deleter, data);
226```
227
228### ByteLength
229
230int32_t BufferRef::ByteLength(const EcmaVM *vm);
231
232此函数返回此ArrayBufferRef缓冲区的长度(以字节为单位)。
233
234**参数:**
235
236| 参数名 | 类型 | 必填 | 说明 |
237| :----: | -------------- | ---- | ------------ |
238| vm | const EcmaVM * | 是 | 虚拟机对象。 |
239
240**返回值:**
241
242| 类型 | 说明 |
243| ------- | ------------------------------- |
244| int32_t | 以int32_t类型返回buffer的长度。 |
245
246**示例:**
247
248```c++
249Local<BufferRef> buffer = BufferRef::New(vm, 10);
250int32_t lenth = buffer->ByteLength(vm);
251```
252
253### GetBuffer
254
255void *BufferRef::GetBuffer();
256
257获取BufferRef的原始缓冲区。
258
259**参数:**
260
261| 参数名 | 类型 | 必填 | 说明 |
262| ------ | ---- | ---- | ---- |
263| 无参 | | | |
264
265**返回值:**
266
267| 类型 | 说明 |
268| ------ | ------------------------------------------------ |
269| void * | 返回为void *,使用时需强转为缓冲区创建时的类型。 |
270
271**示例:**
272
273```c++
274uint8_t *buffer = new uint8_t[10]();
275int *data = new int;
276*data = 10;
277NativePointerCallback deleter = [](void *env, void *buffer, void *data) -> void {
278 delete[] reinterpret_cast<uint8_t *>(buffer);
279 int *currentData = reinterpret_cast<int *>(data);
280 delete currentData;
281};
282Local<BufferRef> bufferRef = BufferRef::New(vm, buffer, 10, deleter, data);
283uint8_t *getBuffer = reinterpret_cast<uint8_t *>(bufferRef->GetBuffer());
284```
285### BufferToStringCallback
286
287static ecmascript::JSTaggedValue BufferToStringCallback(ecmascript::EcmaRuntimeCallInfo *ecmaRuntimeCallInfo);
288
289调用ToString函数时会触发的回调函数。
290
291**参数:**
292
293| 参数名 | 类型 | 必填 | 说明 |
294| ------------------- | ---------------------- | ---- | -------------------------------------- |
295| ecmaRuntimeCallInfo | EcmaRuntimeCallInfo * | 是 | 设置指定的回调函数,以及所需要的参数。 |
296
297**返回值:**
298
299| 类型 | 说明 |
300| ------------- | ------------------------------------------------------------ |
301| JSTaggedValue | 将设置回调函数的结果转换为JSTaggedValue类型,并作为此函数的返回值。 |
302
303**示例:**
304
305```C++
306Local<BufferRef> bufferRef = BufferRef::New(vm, 10);
307Local<StringRef> bufferStr = bufferRef->ToString(vm);
308```
309
310## DataViewRef
311
312一种用于操作二进制数据的视图对象,它提供了一种方式来访问和修改 ArrayBuffer 中的字节。
313
314### New
315
316static Local<DataViewRef> New(const EcmaVM *vm, Local<ArrayBufferRef> arrayBuffer, uint32_t byteOffset,uint32_t byteLength);
317
318创建一个新的DataView对象。
319
320**参数:**
321
322| 参数名 | 类型 | 必填 | 说明 |
323| ----------- | --------------------- | ---- | -------------------------- |
324| vm | const EcmaVM * | 是 | 虚拟机对象。 |
325| arrayBuffer | Local<ArrayBufferRef> | 是 | 指定的缓冲区。 |
326| byteOffset | uint32_t | 是 | 从第几个字节开始写入数据。 |
327| byteLength | uint32_t | 是 | 要操作的缓冲区的长度。 |
328
329**返回值:**
330
331| 类型 | 说明 |
332| ------------------ | ---------------------- |
333| Local<DataViewRef> | 一个新的DataView对象。 |
334
335**示例:**
336
337```c++
338const int32_t length = 15;
339Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm, length);
340Local<DataViewRef> dataObj = DataViewRef::New(vm, arrayBuffer, 5, 7);
341```
342
343### ByteOffset
344
345uint32_t DataViewRef::ByteOffset();
346
347获取DataViewRef缓冲区的偏移量。
348
349**参数:**
350
351| 参数名 | 类型 | 必填 | 说明 |
352| ------ | ---- | ---- | ---- |
353| 无参 | | | |
354
355**返回值:**
356
357| 类型 | 说明 |
358| -------- | ---------------------------------- |
359| uint32_t | 该缓冲区从那个字节开始写入或读取。 |
360
361**示例:**
362
363```C++
364const int32_t length = 15;
365Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm, length);
366Local<DataViewRef> dataView = DataViewRef::New(vm, arrayBuffer, 5, 7);
367uint32_t offSet = dataView->ByteOffset();
368```
369
370### ByteLength
371
372uint32_t DataViewRef::ByteLength();
373
374获取DataViewRef缓冲区可操作的长度。
375
376**参数:**
377
378| 参数名 | 类型 | 必填 | 说明 |
379| ------ | ---- | ---- | ---- |
380| 无参 | | | |
381
382**返回值:**
383
384| 类型 | 说明 |
385| -------- | ------------------------------- |
386| uint32_t | DataViewRef缓冲区可操作的长度。 |
387
388**示例:**
389
390```C++
391const int32_t length = 15;
392Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm, length);
393Local<DataViewRef> dataView = DataViewRef::New(vm, arrayBuffer, 5, 7);
394uint32_t offSet = dataView->ByteLength();
395```
396
397### GetArrayBuffer
398
399Local<ArrayBufferRef> DataViewRef::GetArrayBuffer(const EcmaVM *vm);
400
401获取DataViewRef对象的缓冲区。
402
403**参数:**
404
405| 参数名 | 类型 | 必填 | 说明 |
406| :----: | -------------- | ---- | ------------ |
407| vm | const EcmaVM * | 是 | 虚拟机对象。 |
408
409**返回值:**
410
411| 类型 | 说明 |
412| --------------------- | ------------------------------------------------------------ |
413| Local<ArrayBufferRef> | 获取DataViewRef的缓冲区,将其转换为Local<ArrayBufferRef>类型,并作为函数的返回值。 |
414
415**示例:**
416
417```c++
418const int32_t length = 15;
419Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm, length);
420Local<DataViewRef> dataView = DataViewRef::New(vm, arrayBuffer, 5, 7);
421Local<ArrayBufferRef> getBuffer = dataView->GetArrayBuffer(vm);
422```
423
424## DateRef
425
426Date对象用于表示日期和时间。它提供了许多方法和属性来处理日期和时间。
427
428### GetTime
429
430double DateRef::GetTime();
431
432该方法返回自纪元以来该日期的毫秒数,该纪元定义为 1970 年 1 月 1 日,UTC 开始时的午夜。
433
434**参数:**
435
436| 参数名 | 类型 | 必填 | 说明 |
437| ------ | ---- | ---- | ---- |
438| 无参 | | | |
439
440**返回值:**
441
442| 类型 | 说明 |
443| ------ | ------------------------------------------------ |
444| double | 一个double数字,表示此日期的时间戳以毫秒为单位。 |
445
446**示例:**
447
448```c++
449double time = 1690854800000; // 2023-07-04T00:00:00.000Z
450Local<DateRef> object = DateRef::New(vm, time);
451double getTime = object->GetTime();
452```
453
454## JSNApi
455
456JSNApi提供了一些通用的接口用于查询或获取一些对象属性。
457
458### IsBundle
459
460bool JSNApi::IsBundle(EcmaVM *vm);
461
462判断将文件或者模块打包时,是不是JSBundle模式。
463
464**参数:**
465
466| 参数名 | 类型 | 必填 | 说明 |
467| :----: | -------------- | ---- | ------------ |
468| vm | const EcmaVM * | 是 | 虚拟机对象。 |
469
470**返回值:**
471
472| 类型 | 说明 |
473| ---- | --------------------------------------------- |
474| bool | 当为JSBundle模式时时返回true,否则返回false。 |
475
476**示例:**
477
478```c++
479bool b = JSNApi::IsBundle(vm);
480```
481
482### addWorker
483
484void JSNApi::addWorker(EcmaVM *hostVm, EcmaVM *workerVm)
485
486创建一个新的虚拟机添加到指定虚拟机的工作列表中。
487
488**参数:**
489
490| 参数名 | 类型 | 必填 | 说明 |
491| :------: | -------------- | ---- | -------------------- |
492| hostVm | const EcmaVM * | 是 | 指定虚拟机对象。 |
493| workerVm | const EcmaVM * | 是 | 创建新的工作虚拟机。 |
494
495**返回值:**
496
497| 类型 | 说明 |
498| ---- | ---------- |
499| void | 无返回值。 |
500
501**示例:**
502
503```c++
504JSRuntimeOptions option;
505EcmaVM *workerVm = JSNApi::CreateEcmaVM(option);
506JSNApi::addWorker(hostVm, workerVm);
507```
508
509### SerializeValue
510
511void *JSNApi::SerializeValue(const EcmaVM *vm, Local<JSValueRef> value, Local<JSValueRef> transfer)
512
513将value序列化为transfer类型。
514
515**参数:**
516
517| 参数名 | 类型 | 必填 | 说明 |
518| :------: | ----------------- | ---- | ------------------ |
519| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
520| value | Local<JSValueRef> | 是 | 需要序列化的数据。 |
521| transfer | Local<JSValueRef> | 是 | 序列化的类型。 |
522
523**返回值:**
524
525| 类型 | 说明 |
526| ------ | ------------------------------------------------------------ |
527| void * | 转化为SerializationData *可调用GetData,GetSize获取序列化的数据以及大小。 |
528
529**示例:**
530
531```c++
532Local<JSValueRef> value = StringRef::NewFromUtf8(vm, "abcdefbb");
533Local<JSValueRef> transfer = StringRef::NewFromUtf8(vm, "abcdefbb");
534SerializationData *ptr = JSNApi::SerializeValue(vm, value, transfer);
535```
536
537### DisposeGlobalHandleAddr
538
539static void DisposeGlobalHandleAddr(const EcmaVM *vm, uintptr_t addr);
540
541释放全局句柄
542
543**参数:**
544
545| 参数名 | 类型 | 必填 | 说明 |
546| :----: | -------------- | ---- | ---------------- |
547| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
548| addr | uintptr_t | 是 | 全局句柄的地址。 |
549
550**返回值:**
551
552| 类型 | 说明 |
553| ---- | ---------- |
554| void | 无返回值。 |
555
556**示例:**
557
558```C++
559Local<JSValueRef> value = StringRef::NewFromUtf8(vm, "abc");
560uintptr_t address = JSNApi::GetGlobalHandleAddr(vm, reinterpret_cast<uintptr_t>(*value));
561JSNApi::DisposeGlobalHandleAddr(vm, address);
562```
563
564### CheckSecureMem
565
566static bool CheckSecureMem(uintptr_t mem);
567
568检查给定的内存地址是否安全。
569
570**参数:**
571
572| 参数名 | 类型 | 必填 | 说明 |
573| :----: | --------- | ---- | -------------------- |
574| mem | uintptr_t | 是 | 需要检查的内存地址。 |
575
576**返回值:**
577
578| 类型 | 说明 |
579| ---- | ----------------------------------- |
580| bool | 内存地址安全返回true否则返回false。 |
581
582**示例:**
583
584```c++
585Local<JSValueRef> value = StringRef::NewFromUtf8(vm, "abc");
586uintptr_t address = JSNApi::GetGlobalHandleAddr(vm, reinterpret_cast<uintptr_t>(*value));
587bool b = CheckSecureMem(address);
588```
589
590### GetGlobalObject
591
592Local<ObjectRef> JSNApi::GetGlobalObject(const EcmaVM *vm)
593
594用于能否成功获取JavaScript虚拟机的env全局对象,以及该全局对象是否为非空对象。
595
596**参数:**
597
598| 参数名 | 类型 | 必填 | 说明 |
599| :----: | -------------- | ---- | ---------------- |
600| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
601
602**返回值:**
603
604| 类型 | 说明 |
605| ---------------- | --------------------------------------------------------- |
606| Local<ObjectRef> | 可调用ObjectRef以及父类JSValueRef的函数来判断其是否有效。 |
607
608**示例:**
609
610```C++
611Local<ObjectRef> globalObject = JSNApi::GetGlobalObject(vm);
612bool b = globalObject.IsEmpty();
613```
614
615### GetUncaughtException
616
617Local<ObjectRef> JSNApi::GetUncaughtException(const EcmaVM *vm);
618
619获取虚拟机未捕获的异常
620
621**参数:**
622
623| 参数名 | 类型 | 必填 | 说明 |
624| :----: | -------------- | ---- | ---------------- |
625| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
626
627**返回值:**
628
629| 类型 | 说明 |
630| ---------------- | --------------------------------------------------------- |
631| Local<ObjectRef> | 可调用ObjectRef以及父类JSValueRef的函数来判断其是否有效。 |
632
633**示例:**
634
635```c++
636Local<ObjectRef> excep = JSNApi::GetUncaughtException(vm);
637if (!excep.IsNull()) {
638 // Error Message ...
639}
640```
641
642### GetAndClearUncaughtException
643
644Local<ObjectRef> JSNApi::GetAndClearUncaughtException(const EcmaVM *vm);
645
646用于获取并清除未捕获的虚拟机异常。
647
648**参数:**
649
650| 参数名 | 类型 | 必填 | 说明 |
651| :----: | -------------- | ---- | ---------------- |
652| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
653
654**返回值:**
655
656| 类型 | 说明 |
657| ---------------- | --------------------------------------------------------- |
658| Local<ObjectRef> | 可调用ObjectRef以及父类JSValueRef的函数来判断其是否有效。 |
659
660**示例:**
661
662```C++
663Local<ObjectRef> excep = JSNApi::GetUncaughtException(vm);
664if (!excep.IsNull()) {
665 // Error Message ...
666 JSNApi::GetAndClearUncaughtException(vm);
667}
668```
669
670### HasPendingException
671
672bool JSNApi::HasPendingException(const EcmaVM *vm);
673
674用于检查虚拟机是否有未处理的异常。
675
676**参数:**
677
678| 参数名 | 类型 | 必填 | 说明 |
679| :----: | -------------- | ---- | ---------------- |
680| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
681
682**返回值:**
683
684| 类型 | 说明 |
685| ---- | --------------------------------------------- |
686| bool | 如果此虚拟机有异常产生返回true否则返回false。 |
687
688**示例:**
689
690```c++
691if (JSNApi::HasPendingException(vm)) {
692 JSNApi::PrintExceptionInfo(const EcmaVM *vm);
693}
694```
695
696### PrintExceptionInfo
697
698void JSNApi::PrintExceptionInfo(const EcmaVM *vm);
699
700用于打印未捕获的异常,并清除此虚拟机的异常。
701
702**参数:**
703
704| 参数名 | 类型 | 必填 | 说明 |
705| :----: | -------------- | ---- | ---------------- |
706| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
707
708**返回值:**
709
710| 类型 | 说明 |
711| ---- | ---------- |
712| void | 无返回值。 |
713
714**示例:**
715
716```C++
717if (JSNApi::HasPendingException(vm)) {
718 JSNApi::PrintExceptionInfo(vm);
719}
720```
721
722### SetWeakCallback
723
724uintptr_t JSNApi::SetWeakCallback(const EcmaVM *vm, uintptr_t localAddress, void *ref, WeakRefClearCallBack freeGlobalCallBack, WeakRefClearCallBack nativeFinalizeCallback);
725
726此函数用于设置一个弱回调函数。弱回调函数是一种特殊类型的回调函数,它可以在不需要时自动释放内存,以避免内存泄漏问题。
727
728**参数:**
729
730| 参数名 | 类型 | 必填 | 说明 |
731| :--------------------: | -------------------- | ---- | ---------------------------------------------------------- |
732| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
733| localAddress | uintptr_t | 是 | 本地地址,指设置的弱引用在内存地址 |
734| ref | void * | 是 | 需要引用对象的内存地址。 |
735| freeGlobalCallBack | WeakRefClearCallBack | 是 | 弱引用清除回调函数,当弱引用被清除时,该回调函数将被调用。 |
736| nativeFinalizeCallback | WeakRefClearCallBack | 是 | C++原生对象的析构函数。 |
737
738**返回值:**
739
740| 类型 | 说明 |
741| --------- | -------------------------- |
742| uintptr_t | 弱引用在内存空间中的地址。 |
743
744**示例:**
745
746```C++
747template <typename T> void FreeGlobalCallBack(void *ptr)
748{
749 T *i = static_cast<T *>(ptr);
750}
751template <typename T> void NativeFinalizeCallback(void *ptr)
752{
753 T *i = static_cast<T *>(ptr);
754 delete i;
755}
756Global<JSValueRef> global(vm, BooleanRef::New(vm, true));
757void *ref = new char('a');
758WeakRefClearCallBack freeGlobalCallBack = FreeGlobalCallBack<char>;
759WeakRefClearCallBack nativeFinalizeCallback = NativeFinalizeCallback<char>;
760global.SetWeakCallback(ref, freeGlobalCallBack, nativeFinalizeCallback);
761```
762
763### ThrowException
764
765void JSNApi::ThrowException(const EcmaVM *vm, Local<JSValueRef> error);
766
767VM虚拟机抛出指定异常。
768
769**参数:**
770
771| 参数名 | 类型 | 必填 | 说明 |
772| :----: | ----------------- | ---- | ---------------- |
773| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
774| error | Local<JSValueRef> | 是 | 指定error信息。 |
775
776**返回值:**
777
778| 类型 | 说明 |
779| ---- | ---------- |
780| void | 无返回值。 |
781
782**示例:**
783
784```C++
785Local<JSValueRef> error = Exception::Error(vm, StringRef::NewFromUtf8(vm, "Error Message"));
786JSNApi::ThrowException(vm, error);
787```
788
789### NotifyNativeCalling
790
791static void NotifyNativeCalling(const EcmaVM *vm, const void *nativeAddress);
792
793void JSNApi::NotifyNativeCalling([[maybe_unused]] const EcmaVM *vm, [[maybe_unused]] const void *nativeAddress);
794
795在特定条件下通知原生调用事件。
796
797**参数:**
798
799| 参数名 | 类型 | 必填 | 说明 |
800| ------------- | ------------------------------- | ---- | ------------------- |
801| vm | [[maybe_unused]] const EcmaVM * | 是 | 虚拟机对象。 |
802| nativeAddress | [[maybe_unused]] const void * | 是 | C++原生对象的地址。 |
803
804**返回值:**
805
806无
807
808**示例:**
809
810```c++
811void *par = new int(0);
812JSNApi::NotifyNativeCalling(vm_, par);
813```
814
815### function
816
817std::function<bool(std::string dirPath, uint8_t **buff, size_t *buffSize)> cb);
818
819一个函数对象,可以用于存储、传递和调用一个可调用对象(如函数、lambda表达式或函数对象),以便在需要时执行相应的操作。
820
821**参数:**
822
823| 参数名 | 类型 | 必填 | 说明 |
824| -------- | ----------- | ---- | ----------------------------------------------- |
825| dirPath | std::string | 是 | 字符串类型的参数,表示目录路径。 |
826| buff | uint8_t ** | 是 | 指向uint8_t类型指针的指针,用于存储缓冲区数据。 |
827| buffSize | size_t * | 是 | 指向size_t类型的指针,用于存储缓冲区大小。 |
828
829**返回值:**
830
831| 类型 | 说明 |
832| ---- | ----------------------------------------------------- |
833| bool | 布尔值:true 或 false。表示该函数执行的操作是否成功。 |
834
835**示例:**
836
837```c++
838static *void *SetHostResolveBufferTracker(EcmaVM **vm*, std::function<*bool*(std::string dirPath, *uint8_t* **buff, *size_t* *buffSize)> *cb*);
839```
840
841### SetProfilerState
842
843static void JSNApi::SetProfilerState(const EcmaVM *vm, bool value);
844
845用于设置虚拟机(EcmaVM)的CPUProfiler采样状态。
846
847**参数:**
848
849| 参数名 | 类型 | 必填 | 说明 |
850| ------ | -------------- | ---- | ----------------------- |
851| vm | const EcmaVM * | 是 | 虚拟机对象。 |
852| value | bool | 是 | 布尔值:true 或 false。 |
853
854**返回值:**
855
856无
857
858**示例:**
859
860```c++
861bool ret = true;
862JSNApi::SetProfilerState(vm_, ret);
863```
864
865### IsProfiling
866
867static bool JSNApi::IsProfiling(EcmaVM *vm);
868
869用于检查虚拟机(EcmaVM)是否处于CPUProfiling采样状态。
870
871**参数:**
872
873| 参数名 | 类型 | 必填 | 说明 |
874| ------ | -------- | ---- | ------------ |
875| vm | EcmaVM * | 是 | 虚拟机对象。 |
876
877**返回值:**
878
879| 类型 | 说明 |
880| ---- | ------------------------------------------------------------ |
881| bool | 如果虚拟机(EcmaVM)处于CPUProfiling采样状态,返回true。否则,返回false。 |
882
883**示例:**
884
885```c++
886bool b = JSNApi::IsProfiling(vm_);
887```
888
889### SynchronizVMInfo
890
891static void JSNApi::SynchronizVMInfo(EcmaVM *vm, const EcmaVM *hostVM);
892
893将一个EcmaVM对象的信息复制到另一个EcmaVM对象中,使它们具有相同的信息和属性。
894
895**参数:**
896
897| 参数名 | 类型 | 必填 | 说明 |
898| ------ | -------- | ---- | -------------------------- |
899| vm | EcmaVM * | 是 | 虚拟机对象(复制源)。 |
900| hostVM | EcmaVM * | 是 | 虚拟机对象(复制目的地)。 |
901
902**返回值:**
903
904无
905
906**示例:**
907
908```c++
909JSNApi::SynchronizVMInfo(vm_, hostVM_);
910```
911
912### SetLoop
913
914static void JSNApi::SetLoop(EcmaVM *vm, void *loop);
915
916将loop指针传递给EcmaVM对象vm的SetLoop方法。
917
918**参数:**
919
920| 参数名 | 类型 | 必填 | 说明 |
921| ------ | -------- | ---- | -------------- |
922| vm | EcmaVM * | 是 | 虚拟机对象。 |
923| loop | void * | 是 | 循环回调函数。 |
924
925**返回值:**
926
927无
928
929**示例:**
930
931```c++
932JSNApi::SetLoop(vm_, loop);
933```
934
935### SetAssetPath
936
937static void JSNApi::SetAssetPath(EcmaVM *vm, const std::string &assetPath);
938
939将assetPath字符串转换为C风格的字符串,并将其传递给EcmaVM对象vm的SetAssetPath方法。
940
941**参数:**
942
943| 参数名 | 类型 | 必填 | 说明 |
944| --------- | ------------------- | ---- | ---------------- |
945| vm | EcmaVM * | 是 | 虚拟机对象。 |
946| assetPath | const std::string & | 是 | 要设置的资源路径 |
947
948**返回值:**
949
950无
951
952**示例:**
953
954```c++
955JSNApi::SetAssetPath(vm_, assetPath);
956```
957
958### SetBundle
959
960static void JSNApi::SetBundle(EcmaVM *vm, bool value);
961
962将value传递给EcmaVM对象vm的SetIsBundlePack方法。
963
964**参数:**
965
966| 参数名 | 类型 | 必填 | 说明 |
967| ------ | -------- | ---- | ----------------------- |
968| vm | EcmaVM * | 是 | 虚拟机对象。 |
969| value | bool | 是 | 布尔值:true 或 false。 |
970
971**返回值:**
972
973无
974
975**示例:**
976
977```c++
978JSNApi::SetBundle(vm_, value);
979```
980
981### SwitchCurrentContext
982
983static void JSNApi::SwitchCurrentContext(EcmaVM *vm, EcmaContext *context);
984
985将当前上下文切换到指定的context。
986
987**参数:**
988
989| 参数名 | 类型 | 必填 | 说明 |
990| ------- | ------------- | ---- | ------------------ |
991| vm | EcmaVM * | 是 | 虚拟机对象。 |
992| context | EcmaContext * | 是 | 要切换到的上下文。 |
993
994**返回值:**
995
996无
997
998**示例:**
999
1000```c++
1001JSNApi::SwitchCurrentContext(vm_, context);
1002```
1003
1004### LoadAotFile
1005
1006static void JSNApi::LoadAotFile(EcmaVM *vm, const std::string &moduleName);
1007
1008加载一个Ahead-of-Time(AOT)文件。
1009
1010**参数:**
1011
1012| 参数名 | 类型 | 必填 | 说明 |
1013| ---------- | ------------------- | ---- | ------------------------- |
1014| vm | EcmaVM * | 是 | 虚拟机对象。 |
1015| moduleName | const std::string & | 是 | 要加载的 AOT 文件的名称。 |
1016
1017**返回值:**
1018
1019无
1020
1021**示例:**
1022
1023```c++
1024JSNApi::LoadAotFile(vm_, moduleName);
1025```
1026
1027### DestroyJSVM
1028
1029static void JSNApi::DestroyJSVM(EcmaVM *ecmaVm);
1030
1031销毁一个指定的ECMA虚拟机(EcmaVM)。
1032
1033**参数:**
1034
1035| 参数名 | 类型 | 必填 | 说明 |
1036| ------ | -------- | ---- | -------------------- |
1037| ecmaVm | EcmaVM * | 是 | 要销毁的虚拟机对象。 |
1038
1039**返回值:**
1040
1041无
1042
1043**示例:**
1044
1045```c++
1046 JSNApi::DestroyJSVM(ecmaVm);
1047```
1048
1049### DeleteSerializationData
1050
1051void JSNApi::DeleteSerializationData(void *data);
1052
1053删除一个序列化数据对象。
1054
1055**参数:**
1056
1057| 参数名 | 类型 | 必填 | 说明 |
1058| ------ | ------ | ---- | -------------------- |
1059| data | void * | 是 | 要删除的序列化数据。 |
1060
1061**返回值:**
1062
1063无
1064
1065**示例:**
1066
1067```c++
1068JSNApi::DeleteSerializationData(data);
1069```
1070
1071### DeserializeValue
1072
1073Local<JSValueRef> JSNApi::DeserializeValue(const EcmaVM *vm, void *recoder, void *hint);
1074
1075将序列化数据反序列化为JavaScript值。
1076
1077**参数:**
1078
1079| 参数名 | 类型 | 必填 | 说明 |
1080| ------- | -------------- | ---- | ------------------------ |
1081| vm | const EcmaVM * | 是 | 虚拟机对象。 |
1082| recoder | void * | 是 | 用于反序列化的编解码器。 |
1083| hint | void * | 是 | 可选的提示对象。 |
1084
1085**返回值;**
1086
1087| 类型 | 说明 |
1088| ----------------- | ------------------------------------------ |
1089| Local<JSValueRef> | 返回转换成 JSValueRef 类型的反序列化数据。 |
1090
1091**示例:**
1092
1093```c++
1094 Local<JSValueRef> value = JSNApi::DeserializeValue(vm_, recoder, hint);
1095```
1096
1097### Execute
1098
1099bool JSNApi::Execute(EcmaVM *vm, const uint8_t *data, int32_t size, const std::string &entry,const std::string &filename, bool needUpdate);
1100
1101执行一个Ark缓冲区文件。
1102
1103**参数:**
1104
1105| 参数名 | 类型 | 必填 | 说明 |
1106| ---------- | ------------------- | ---- | ----------------------------------------------------------- |
1107| vm | EcmaVM * | 是 | 虚拟机对象。 |
1108| data | const uint8_t * | 是 | JavaScript代码的字节数组。 |
1109| size | int32_t | 是 | JavaScript代码的大小(以字节为单位)。 |
1110| entry | const std::string & | 是 | JavaScript代码入口点的名称。 |
1111| filename | const std::string & | 是 | JavaScript代码文件名。 |
1112| needUpdate | bool | 是 | 布尔值:true 或 false。(表示是否需要更新虚拟机对象的状态) |
1113
1114**返回值:**
1115
1116| 类型 | 说明 |
1117| ---- | -------------------------------------------------- |
1118| bool | 执行Ark缓冲区文件成功,返回true。否则,返回false。 |
1119
1120**示例:**
1121
1122```c++
1123bool b = JSNApi::Execute(vm_, data, size, entry,filename, needUpdate);
1124```
1125
1126### Execute
1127
1128bool JSNApi::Execute(EcmaVM *vm, const std::string &fileName, const std::string &entry, bool needUpdate);
1129
1130执行一个Ark文件。
1131
1132**参数:**
1133
1134| 参数名 | 类型 | 必填 | 说明 |
1135| ---------- | ------------------- | ---- | ----------------------------------------------------------- |
1136| vm | EcmaVM * | 是 | 虚拟机对象。 |
1137| fileName | const std::string & | 是 | JavaScript代码文件名。 |
1138| entry | const std::string & | 是 | JavaScript代码入口点的名称。 |
1139| needUpdate | bool | 是 | 布尔值:true 或 false。(表示是否需要更新虚拟机对象的状态) |
1140
1141**返回值:**
1142
1143| 类型 | 说明 |
1144| ---- | -------------------------------------------- |
1145| bool | 执行Ark文件成功,返回true。否则,返回false。 |
1146
1147**示例:**
1148
1149```c++
1150bool b = JSNApi::Execute(vm_, fileName, entry, needUpdate);
1151```
1152
1153### SetHostPromiseRejectionTracker
1154
1155void JSNApi::SetHostPromiseRejectionTracker(EcmaVM *vm, void *cb, void* data);
1156
1157用于设置与JavaScript虚拟机(EcmaVM)相关联的宿主Promise拒绝跟踪器(Host Promise Rejection Tracker)。
1158
1159**参数:**
1160
1161| 参数名 | 类型 | 必填 | 说明 |
1162| ------ | -------- | ---- | --------------------------------------------- |
1163| vm | EcmaVM * | 是 | 虚拟机对象。 |
1164| cb | void | 是 | 要设置为当前ECMA上下文的Promise拒绝回调函数。 |
1165| data | void | 是 | 要设置为当前ECMA上下文的数据。 |
1166
1167**返回值:**
1168
1169无
1170
1171**示例:**
1172
1173```c++
1174JSNApi::SetHostPromiseRejectionTracker(vm_, cb, data);
1175```
1176
1177### ExecuteModuleFromBuffer
1178
1179static bool ExecuteModuleFromBuffer(EcmaVM *vm, const void *data, int32_t size, const std::string &file);
1180
1181从给定的数据缓冲区中执行一个模块。
1182
1183**参数:**
1184
1185| 参数名 | 类型 | 必填 | 说明 |
1186| ------ | ----------------- | ---- | ---------------------- |
1187| vm | EcmaVM * | 是 | 虚拟机对象 |
1188| data | const void * | 是 | 要执行的模块数据 |
1189| size | int32_t | 是 | 要执行的模块数据的大小 |
1190| file | const std::string | 是 | 要执行的模块文件的名称 |
1191
1192**返回值:**
1193
1194| 类型 | 说明 |
1195| :------ | :-------------------------------------------- |
1196| boolean | 如果执行模块成功,则返回true,否则返回false。 |
1197
1198**示例:**
1199
1200```c++
1201const void *data = "TestData";
1202int32_t size = 8;
1203const std::string file = "TestFile";
1204bool result = JSNApi::ExecuteModuleFromBuffer(vm_, data, size, file);
1205```
1206
1207### GetExportObject
1208
1209static Local<ObjectRef> GetExportObject(EcmaVM *vm, const std::string &file, const std::string &key);
1210
1211根据指定的文件和key值获取并导出对象。
1212
1213**参数:**
1214
1215| 参数名 | 类型 | 必填 | 说明 |
1216| ------ | ----------------- | ---- | -------------- |
1217| vm | EcmaVM * | 是 | 虚拟机对象 |
1218| file | const std::string | 是 | 指定的文件名称 |
1219| key | const std::string | 是 | 指定的key值 |
1220
1221**返回值:**
1222
1223| 类型 | 说明 |
1224| :--------------- | :--------------------- |
1225| Local<ObjectRef> | 返回获取并导出的对象。 |
1226
1227**示例:**
1228
1229```c++
1230const std::string file = "TestFile";
1231const std::string key = "TestKey";
1232Local<ObjectRef> result = GetExportObject(vm_, file, key);
1233```
1234
1235### GetExportObjectFromBuffer
1236
1237static Local<ObjectRef> GetExportObjectFromBuffer(EcmaVM *vm, const std::string &file, const std::string &key);
1238
1239从给定的缓冲区中根据指定的文件和key值获取并导出对象。
1240
1241**参数:**
1242
1243| 参数名 | 类型 | 必填 | 说明 |
1244| ------ | ----------------- | ---- | -------------- |
1245| vm | EcmaVM * | 是 | 虚拟机对象 |
1246| file | const std::string | 是 | 指定的文件名称 |
1247| key | const std::string | 是 | 指定的key值 |
1248
1249**返回值:**
1250
1251| 类型 | 说明 |
1252| :--------------- | :------------------------------------- |
1253| Local<ObjectRef> | 返回从给定的缓冲区中获取并导出的对象。 |
1254
1255**示例:**
1256
1257```c++
1258const std::string file = "TestFile";
1259const std::string key = "TestKey";
1260Local<ObjectRef> result = GetExportObjectFromBuffer(vm_, file, key);
1261```
1262
1263### GetAndClearUncaughtException
1264
1265static Local<ObjectRef> GetAndClearUncaughtException(const EcmaVM *vm);
1266
1267获取并清理未捕获的异常。
1268
1269**参数:**
1270
1271| 参数名 | 类型 | 必填 | 说明 |
1272| ------ | -------------- | ---- | ---------- |
1273| vm | const EcmaVM * | 是 | 虚拟机对象 |
1274
1275**返回值:**
1276
1277| 类型 | 说明 |
1278| :--------------- | :--------------------- |
1279| Local<ObjectRef> | 返回未捕获的异常对象。 |
1280
1281**示例:**
1282
1283```c++
1284Local<ObjectRef> result = JSNApi::GetAndClearUncaughtException(vm_);
1285```
1286
1287### GetUncaughtException
1288
1289static Local<ObjectRef> GetUncaughtException(const EcmaVM *vm);
1290
1291获取未捕获的异常。
1292
1293**参数:**
1294
1295| 参数名 | 类型 | 必填 | 说明 |
1296| ------ | -------------- | ---- | ---------- |
1297| vm | const EcmaVM * | 是 | 虚拟机对象 |
1298
1299**返回值:**
1300
1301| 类型 | 说明 |
1302| :--------------- | :--------------------- |
1303| Local<ObjectRef> | 返回未捕获的异常对象。 |
1304
1305**示例:**
1306
1307```c++
1308Local<ObjectRef> result = JSNApi::GetUncaughtException(vm_);
1309```
1310
1311### HasPendingException
1312
1313static bool HasPendingException(const EcmaVM *vm);
1314
1315检查是否有待处理的异常。
1316
1317**参数:**
1318
1319| 参数名 | 类型 | 必填 | 说明 |
1320| ------ | -------------- | ---- | ---------- |
1321| vm | const EcmaVM * | 是 | 虚拟机对象 |
1322
1323**返回值:**
1324
1325| 类型 | 说明 |
1326| :------ | :---------------------------------------------- |
1327| boolean | 如果有待处理的异常,则返回true,否则返回false。 |
1328
1329**示例:**
1330
1331```c++
1332bool result = JSNApi::HasPendingException(vm_);
1333```
1334
1335### HasPendingJob
1336
1337static bool HasPendingJob(const EcmaVM *vm);
1338
1339检查是否有待处理的任务。
1340
1341**参数:**
1342
1343| 参数名 | 类型 | 必填 | 说明 |
1344| ------ | -------------- | ---- | ---------- |
1345| vm | const EcmaVM * | 是 | 虚拟机对象 |
1346
1347**返回值:**
1348
1349| 类型 | 说明 |
1350| :------ | :---------------------------------------------- |
1351| boolean | 如果有待处理的任务,则返回true,否则返回false。 |
1352
1353**示例:**
1354
1355```c++
1356bool result = JSNApi::HasPendingJob(vm_);
1357```
1358
1359### DestroyJSContext
1360
1361static void DestroyJSContext(EcmaVM *vm, EcmaContext *context);
1362
1363该函数的作用是销毁与给定虚拟机和上下文相关联的资源,通过 `EcmaContext::CheckAndDestroy` 方法实现检查和销毁过程。
1364
1365**参数:**
1366
1367| 参数名 | 类型 | 必填 | 说明 |
1368| ------- | ------------- | ---- | ---------------------- |
1369| vm | EcmaVM * | 是 | 虚拟机对象。 |
1370| context | EcmaContext * | 是 | 表示Ecma上下文的指针。 |
1371
1372**返回值:**
1373
1374无
1375
1376**示例:**
1377
1378```c++
1379EcmaContext *context1 = JSNApi::CreateJSContext(vm);
1380JSNApi::DestroyJSContext(vm, context1);
1381```
1382
1383### SetMockModuleList
1384
1385static void SetMockModuleList(EcmaVM *vm, const std::map<std::string, std::string> &list);
1386
1387将给定的模拟模块列表设置到指定的Ecma虚拟机中。
1388
1389**参数:**
1390
1391| 参数名 | 类型 | 必填 | 说明 |
1392| ------ | ------------------------------------------ | ---- | ------------------------------------------------------------ |
1393| vm | EcmaVM * | 是 | 虚拟机对象。 |
1394| list | const std::map<std::string, std::string> & | 是 | 表示一个从字符串到字符串的映射,<br/>其中第一个字符串是模块的名称,第二个字符串是模块的内容。 |
1395
1396**返回值:**
1397
1398无
1399
1400**示例:**
1401
1402```c++
1403std::map<std::string, std::string> mockModuleList;
1404mockModuleList["Module1"] = "Module1Context";
1405mockModuleList["Module2"] = "Module2Context";
1406JSNApi::SetMockModuleList(vm, mockModuleList);
1407```
1408
1409### SetHostPromiseRejectionTracker
1410
1411static void SetHostPromiseRejectionTracker(EcmaVM *vm, void *cb, void *data);
1412
1413该函数用于设置 Ecma 上下文的主机 Promise 拒绝跟踪器,以及相关的回调函数和数据。
1414
1415`SetHostPromiseRejectionTracker` 方法设置主机 Promise 拒绝跟踪器的回调函数。
1416
1417`SetPromiseRejectCallback` 方法设置 Promise 拒绝的回调函数。
1418
1419`SetData` 方法设置特定的数据。
1420
1421**参数:**
1422
1423| 参数名 | 类型 | 必填 | 说明 |
1424| ------ | -------- | ---- | --------------------------------------- |
1425| vm | EcmaVM * | 是 | 虚拟机对象。 |
1426| cb | Void * | 是 | 表示主机 Promise 拒绝跟踪器的回调函数。 |
1427| data | Void * | 是 | 表示将要设置的数据。 |
1428
1429**返回值:**
1430
1431无
1432
1433**示例:**
1434
1435```c++
1436void *data = reinterpret_cast<void *>(builtins::BuiltinsFunction::FunctionPrototypeInvokeSelf);
1437JSNApi::SetHostPromiseRejectionTracker(vm, data, data);
1438```
1439
1440### SetHostResolveBufferTracker
1441
1442static void SetHostResolveBufferTracker(EcmaVM vm,std::function<bool(std::string dirPath, uint8_t*buff, size_t buffSize)> cb);
1443
1444该函数用于设置 Ecma 虚拟机的主机解析缓冲区跟踪器回调函数。
1445
1446回调函数通过 `std::function` 传递,接受目录路径(`dirPath`)和缓冲区指针(`uint8_t** buff`)及其大小指针(`size_t* buffSize`)作为参数,并返回一个布尔值,表示是否成功解析缓冲区。
1447
1448**参数:**
1449
1450| 参数名 | 类型 | 必填 | 说明 |
1451| ------ | ------------------------------------------------------------ | ---- | ----------------------------------- |
1452| vm | EcmaVM * | 是 | 虚拟机对象。 |
1453| cb | std::function<bool(std::string dirPath, uint8_t **buff, size_t *buffSize)> | 是 | 主机解析缓冲区跟踪器<br/>的回调函数 |
1454
1455**返回值:**
1456
1457无
1458
1459**示例:**
1460
1461```c++
1462std::function<bool(std::string dirPath, uint8_t * *buff, size_t * buffSize)> cb = [](const std::string &inputPath,
1463 uint8_t **buff, size_t *buffSize) -> bool {
1464 if (inputPath.empty() || buff == nullptr || buffSize == nullptr) {
1465 return false;
1466 }
1467 return false;
1468};
1469JSNApi::SetHostResolveBufferTracker(vm, cb);
1470```
1471
1472### SetUnloadNativeModuleCallback
1473
1474static void SetUnloadNativeModuleCallback(EcmaVM *vm, const std::function<bool(const std::string &moduleKey)> &cb);
1475
1476自定义卸载本体模块时的行为。
1477
1478**参数:**
1479
1480| 参数名 | 类型 | 必填 | 说明 |
1481| ------ | ------------------------------------------------- | ---- | ------------------------------------------------------------ |
1482| vm | EcmaVM * | 是 | 虚拟机对象。 |
1483| cb | std::function<bool(const std::string &moduleKey)> | 是 | 回调函数接受一个 `moduleKey` 参数(字符串类型)<br/>并返回一个布尔值,表示是否成功卸载本地模块 |
1484
1485**返回值:**
1486
1487无
1488
1489**示例:**
1490
1491```c++
1492bool UnloadNativeModuleCallback(const std::string &moduleKey) {
1493 return true;
1494}
1495JSNApi::SetUnloadNativeModuleCallback(vm, UnloadNativeModuleCallback);
1496```
1497
1498### SetNativePtrGetter
1499
1500static void SetNativePtrGetter(EcmaVM *vm, void *cb);
1501
1502该函数用于设置 Ecma 虚拟机的本机指针获取器的回调函数。
1503
1504**参数:**
1505
1506| 参数名 | 类型 | 必填 | 说明 |
1507| ------ | -------- | ---- | -------------- |
1508| vm | EcmaVM * | 是 | 虚拟机对象。 |
1509| cb | Void * | 是 | 回调函数指针。 |
1510
1511**返回值:**
1512
1513无
1514
1515**示例:**
1516
1517```c++
1518void *cb = reinterpret_cast<void *>(NativePtrGetterCallback);
1519JSNApi::SetNativePtrGetter(vm, cb);
1520```
1521
1522### SetSourceMapTranslateCallback
1523
1524static void SetSourceMapTranslateCallback(EcmaVM *vm, SourceMapTranslateCallback cb);
1525
1526该函数用于设置 Ecma 虚拟机的源映射翻译回调函数。
1527
1528**参数:**
1529
1530| 参数名 | 类型 | 必填 | 说明 |
1531| -------- | -------------------------- | ---- | ---------------------------------- |
1532| vm | EcmaVM * | 是 | 虚拟机对象。 |
1533| callback | SourceMapTranslateCallback | 是 | 回调函数用于设置源映射翻译的回调。 |
1534
1535**返回值:**
1536
1537无
1538
1539**示例:**
1540
1541```c++
1542bool SourceMapTranslateCallback(const std::string& sourceLocation, std::string& translatedLocation) {
1543 return true;
1544}
1545JSNApi::SetSourceMapTranslateCallback(vm, SourceMapTranslateCallback);
1546```
1547
1548### DestroyMemMapAllocator
1549
1550static void DestroyMemMapAllocator();
1551
1552该函数用于销毁内存映射分配器(MemMapAllocator)的实例。
1553
1554**参数:**
1555
1556无
1557
1558**返回值:**
1559
1560无
1561
1562**示例:**
1563
1564```c++
1565JSNApi::DestroyMemMapAllocator();
1566```
1567
1568### DestroyPGOProfiler
1569
1570static void DestroyPGOProfiler();
1571
1572该函数用于销毁性能分析(PGO,Profile-Guided Optimization)的分析器管理器实例。
1573
1574通过调用 `ecmascript::pgo::PGOProfilerManager::GetInstance()`获取 PGOProfilerManager 的单例实例,并调用 `Destroy` 方法进行销毁。
1575
1576**参数:**
1577
1578无
1579
1580**返回值:**
1581
1582无
1583
1584**示例:**
1585
1586```c++
1587JSNApi::DestroyPGOProfiler();
1588```
1589
1590### ExecutePendingJob
1591
1592static void ExecutePendingJob(const EcmaVM *vm);
1593
1594该函数用于执行当前 Ecma 上下文中挂起的 Promise 任务。
1595
1596在执行前,通过 `CHECK_HAS_PENDING_EXCEPTION_WITHOUT_RETURN` 宏检查是否存在潜在的异常。
1597
1598**参数:**
1599
1600| 参数名 | 类型 | 必填 | 说明 |
1601| ------ | -------------- | ---- | ------------ |
1602| vm | const EcmaVM * | 是 | 虚拟机对象。 |
1603
1604**返回值:**
1605
1606无
1607
1608**示例:**
1609
1610```c++
1611JSNApi::ExecutePendingJob(vm);
1612```
1613
1614### PreFork
1615
1616static void PreFork(EcmaVM *vm);
1617
1618函数用于在执行 fork 操作之前,执行与 Ecma 虚拟机相关的预处理步骤。
1619
1620**参数:**
1621
1622| 参数名 | 类型 | 必填 | 说明 |
1623| ------ | -------- | ---- | ------------ |
1624| vm | EcmaVM * | 是 | 虚拟机对象。 |
1625
1626**返回值:**
1627
1628无
1629
1630**示例:**
1631
1632```c++
1633JSRuntimeOptions option;
1634EcmaVM *workerVm = JSNApi::CreateEcmaVM(option);
1635JSNApi::PreFork(workerVm);
1636```
1637
1638### PostFork
1639
1640static void PostFork(EcmaVM *vm, const RuntimeOption &option);
1641
1642该函数用于在执行 fork 操作之后,执行与 Ecma 虚拟机相关的后处理步骤。
1643
1644**参数:**
1645
1646| 参数名 | 类型 | 必填 | 说明 |
1647| ------ | --------------------- | ---- | -------------------- |
1648| vm | EcmaVM * | 是 | 虚拟机对象。 |
1649| option | const RuntimeOption & | 是 | 运行时选项和配置的类 |
1650
1651**返回值:**
1652
1653无
1654
1655**示例:**
1656
1657```c++
1658RuntimeOption option;
1659JSNApi::PostFork(vm, option);
1660```
1661
1662### ExecuteModuleBuffer
1663
1664static bool ExecuteModuleBuffer(EcmaVM *vm, const uint8_t *data, int32_t size, const std::string &filename = "",bool needUpdate = false);
1665
1666该函数用于执行传入的模块数据。
1667
1668在执行前,函数会检查是否存在潜在的异常(`CHECK_HAS_PENDING_EXCEPTION` 宏)。
1669
1670如果模块执行失败,会输出错误日志并返回 `false`,否则返回 `true`。
1671
1672**参数:**
1673
1674| 参数名 | 类型 | 必填 | 说明 |
1675| ---------- | ------------------ | ---- | ---------------------- |
1676| vm | EcmaVM * | 是 | 虚拟机对象。 |
1677| data | const uint8_t* | 是 | 表示模块数据的指针。 |
1678| size | int32_t | 是 | 表示模块数据的大小。 |
1679| filename | const std::string& | 否 | 表示模块的文件名。 |
1680| needUpdate | bool | 否 | 表示是否需要更新模块。 |
1681
1682**返回值:**
1683
1684| 类型 | 说明 |
1685| ---- | ---------------------- |
1686| bool | 表示模块执行是否成功。 |
1687
1688**示例:**
1689
1690```c++
1691const char *fileName = "__JSNApiTests_ExecuteModuleBuffer.abc";
1692const char *data = R"(
1693 .language ECMAScript
1694 .function any func_main_0(any a0, any a1, any a2) {
1695 ldai 1
1696 return
1697 }
1698)";
1699bool res =
1700 JSNApi::ExecuteModuleBuffer(vm, reinterpret_cast<const uint8_t *>(data), sizeof(data), fileName);
1701```
1702
1703### TriggerGC
1704
1705static void TriggerGC(const EcmaVM *vm, TRIGGER_GC_TYPE gcType = TRIGGER_GC_TYPE::SEMI_GC);
1706
1707该函数用于触发垃圾回收(GC)操作,可以选择不同的垃圾回收类型。
1708
1709通过调用虚拟机的 CollectGarbage 方法执行垃圾回收操作。
1710
1711在触发垃圾回收之前,通过 CHECK_HAS_PENDING_EXCEPTION_WITHOUT_RETURN 宏检查是否存在潜在的异常。
1712
1713**参数:**
1714
1715| 参数名 | 类型 | 必填 | 说明 |
1716| ------ | --------------- | ---- | ---------------------------------------------- |
1717| vm | const EcmaVM * | 是 | 虚拟机对象。 |
1718| gcType | TRIGGER_GC_TYPE | 否 | 是一个枚举类型,表示触发GC(垃圾回收)的类型。 |
1719
1720**返回值:**
1721
1722无
1723
1724**示例:**
1725
1726```c++
1727JSNApi::TriggerGC(vm);
1728```
1729
1730### ThrowException
1731
1732static void ThrowException(const EcmaVM *vm, Local<JSValueRef> error);
1733
1734该函数用于在 Ecma 虚拟机中抛出一个异常。
1735
1736在抛出之前,首先检查是否已经存在挂起的异常,如果存在则记录日志并返回,以保留先前的异常信息。
1737
1738通过 SetException 方法将传入的异常对象设置为当前线程的异常。
1739
1740**参数:**
1741
1742| 参数名 | 类型 | 必填 | 说明 |
1743| ------ | ----------------- | ---- | ------------ |
1744| vm | const EcmaVM * | 是 | 虚拟机对象。 |
1745| error | Local<JSValueRef> | 是 | 异常对象 |
1746
1747**返回值:**
1748
1749无
1750
1751**示例:**
1752
1753```c++
1754Local<StringRef> message = StringRef::NewFromUtf8(vm, "ErrorTest");
1755Local<JSValueRef> error = Exception::Error(vm,message);
1756JSNApi::ThrowException(vm, error);
1757```
1758
1759### PrintExceptionInfo
1760
1761static void PrintExceptionInfo(const EcmaVM *vm);
1762
1763该函数用于打印当前潜在的异常信息,获取当前潜在的异常,如果不存在异常则直接返回。
1764
1765如果异常是 `JSError` 类型,会调用虚拟机的 `PrintJSErrorInfo` 方法打印详细错误信息。
1766
1767否则,将异常转化为字符串并输出到日志中。
1768
1769**参数:**
1770
1771| 参数名 | 类型 | 必填 | 说明 |
1772| ------ | -------------- | ---- | ------------ |
1773| vm | const EcmaVM * | 是 | 虚拟机对象。 |
1774
1775**返回值:**
1776
1777无
1778
1779**示例:**
1780
1781```c++
1782 JSNApi::PrintExceptionInfo(vm);
1783```
1784
1785## JSValueRef
1786
1787JSValueRef是一个用于表示JS值的类。它提供了一些方式来操作和访问JS中的各种数据类型,如字符串、数字、布尔值、对象、数组等。通过使用JSValueRef,您可以获取和设置JS值的属性和方法,执行函数调用,转换数据类型等。
1788
1789### Undefined
1790
1791Local<PrimitiveRef> JSValueRef::Undefined(const EcmaVM *vm);
1792
1793用于获取一个表示未定义值的`Value`对象。这个函数通常在处理JavaScript和C++之间的数据转换时使用。
1794
1795**参数:**
1796
1797| 参数名 | 类型 | 必填 | 说明 |
1798| :----: | -------------- | ---- | ---------------- |
1799| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
1800
1801**返回值:**
1802
1803| 类型 | 说明 |
1804| ------------------- | ---------------- |
1805| Local<PrimitiveRef> | 返回为原生对象。 |
1806
1807**示例:**
1808
1809```C++
1810Local<PrimitiveRef> primitive =JSValueRef::Undefined(vm);
1811```
1812
1813### Null
1814
1815Local<PrimitiveRef> JSValueRef::Null(const EcmaVM *vm);
1816
1817用于获取一个表示为Null的`Value`对象。这个函数通常在处理JavaScript和C++之间的数据转换时使用。
1818
1819**参数:**
1820
1821| 参数名 | 类型 | 必填 | 说明 |
1822| :----: | -------------- | ---- | ---------------- |
1823| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
1824
1825**返回值:**
1826
1827| 类型 | 说明 |
1828| ------------------- | ---------------- |
1829| Local<PrimitiveRef> | 返回为原生对象。 |
1830
1831**示例:**
1832
1833```C++
1834Local<PrimitiveRef> primitive = JSValueRef::Null(vm);
1835```
1836
1837### IsGeneratorObject
1838
1839bool JSValueRef::IsGeneratorObject();
1840
1841判断是否为生成器对象。
1842
1843**参数:**
1844
1845| 参数名 | 类型 | 必填 | 说明 |
1846| ------ | ---- | ---- | ---- |
1847| 无参 | | | |
1848
1849**返回值:**
1850
1851| 类型 | 说明 |
1852| ---- | ------------------------------------- |
1853| bool | 是生成器对象返回true。否则返回false。 |
1854
1855**示例:**
1856
1857```C++
1858ObjectFactory *factory = vm->GetFactory();
1859auto env = vm->GetGlobalEnv();
1860JSHandle<JSTaggedValue> genFunc = env->GetGeneratorFunctionFunction();
1861JSHandle<JSGeneratorObject> genObjHandleVal = factory->NewJSGeneratorObject(genFunc);
1862JSHandle<JSHClass> hclass = JSHandle<JSHClass>::Cast(env->GetGeneratorFunctionClass());
1863JSHandle<JSFunction> generatorFunc = JSHandle<JSFunction>::Cast(factory->NewJSObject(hclass));
1864JSFunction::InitializeJSFunction(vm->GetJSThread(), generatorFunc, FunctionKind::GENERATOR_FUNCTION);
1865JSHandle<GeneratorContext> generatorContext = factory->NewGeneratorContext();
1866generatorContext->SetMethod(vm->GetJSThread(), generatorFunc.GetTaggedValue());
1867JSHandle<JSTaggedValue> generatorContextVal = JSHandle<JSTaggedValue>::Cast(generatorContext);
1868genObjHandleVal->SetGeneratorContext(vm->GetJSThread(), generatorContextVal.GetTaggedValue());
1869JSHandle<JSTaggedValue> genObjTagHandleVal = JSHandle<JSTaggedValue>::Cast(genObjHandleVal);
1870Local<GeneratorObjectRef> genObjectRef = JSNApiHelper::ToLocal<GeneratorObjectRef>(genObjTagHandleVal);
1871bool b = genObjectRef->IsGeneratorObject();
1872```
1873
1874### IsUint8Array
1875
1876bool JSValueRef::IsUint8Array();
1877
1878判断一个JSValueRef对象是否为Uint8Array类型。
1879
1880**参数:**
1881
1882无
1883
1884**返回值:**
1885
1886| 类型 | 说明 |
1887| ---- | ------------------------------------------------------------ |
1888| bool | 如果JSValueRef对象为Uint8Array类型,返回true。否则,返回false。 |
1889
1890**示例:**
1891
1892```c++
1893Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, 5);
1894Local<Uint8ArrayRef> object = Uint8ArrayRef::New(vm_, buffer, 4, 5);
1895bool b = object->IsUint8Array();
1896```
1897
1898### IsInt8Array
1899
1900bool JSValueRef::IsInt8Array();
1901
1902判断一个JSValueRef对象是否为Int8Array类型。
1903
1904**参数:**
1905
1906无
1907
1908**返回值:**
1909
1910| 类型 | 说明 |
1911| ---- | ------------------------------------------------------------ |
1912| bool | 如果JSValueRef对象为Int8Array类型,返回true。否则,返回false。 |
1913
1914**示例:**
1915
1916```c++
1917Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, 5);
1918Local<ObjectRef> object = Int8ArrayRef::New(vm_, buffer, 4, 5);
1919bool b = object->IsInt8Array();
1920```
1921
1922### IsError
1923
1924bool JSValueRef::IsError();
1925
1926判断一个JSValueRef对象是否为错误类型。
1927
1928**参数:**
1929
1930无
1931
1932**返回值:**
1933
1934| 类型 | 说明 |
1935| ---- | --------------------------------------------------------- |
1936| bool | 如果JSValueRef对象为错误类型,返回true。否则,返回false。 |
1937
1938**示例:**
1939
1940```c++
1941Local<StringRef> message = StringRef::NewFromUtf8(vm_, "ErrorTest");
1942bool b = message->IsError();
1943```
1944
1945### InstanceOf
1946
1947bool JSValueRef::InstanceOf(const EcmaVM *vm, Local<JSValueRef> value);
1948
1949检查一个特定的JSValueRef是否属于一个特定的EcmaVM对象。
1950
1951**参数:**
1952
1953| 参数名 | 类型 | 必填 | 说明 |
1954| ------ | ----------------- | ---- | ------------- |
1955| vm | const EcmaVM * | 是 | 虚拟机对象。 |
1956| value | Local<JSValueRef> | 是 | 指定的value。 |
1957
1958**返回值:**
1959
1960| 类型 | 说明 |
1961| ---- | ------------------------------------------------------------ |
1962| bool | 如果特定的JSValueRef属于特定的EcmaVM对象,返回true。否则,返回false。 |
1963
1964**示例:**
1965
1966```c++
1967Local<ObjectRef> origin = ObjectRef::New(vm_);
1968Local<JSValueRef> ConstructObjectJSValueRef(const EcmaVM *vm){
1969 // 构造一个JSValueRef类型的对象value
1970 // ...
1971 return value; // 返回参数value
1972}
1973bool b = origin->InstanceOf(vm_, ConstructObjectJSValueRef(vm_));
1974```
1975
1976### IsPromise
1977
1978bool JSValueRef::IsPromise();
1979
1980判断一个JSValueRef对象是否为Promise类型。
1981
1982**参数:**
1983
1984无
1985
1986**返回值:**
1987
1988| 类型 | 说明 |
1989| ---- | ------------------------------------------------------------ |
1990| bool | 如果JSValueRef对象为PromiseRef类型,返回true。否则,返回false。 |
1991
1992**示例:**
1993
1994```c++
1995Local<JSValueRef> tag = PromiseCapabilityRef::New(vm_)->GetPromise(vm_);
1996bool b = tag->IsPromise();
1997```
1998
1999### IsDate
2000
2001bool JSValueRef::IsDate();
2002
2003判断一个JSValueRef对象是否为日期类型。
2004
2005**参数:**
2006
2007无
2008
2009**返回值:**
2010
2011| 类型 | 说明 |
2012| ---- | --------------------------------------------------------- |
2013| bool | 如果JSValueRef对象为日期类型,返回true。否则,返回false。 |
2014
2015**示例:**
2016
2017```c++
2018double timeRef = 1.1;
2019Local<DateRef> dateRef = DateRef::New(vm_, timeRef);
2020bool b = dateRef->IsDate();
2021```
2022
2023### IsTypedArray
2024
2025bool JSValueRef::IsTypedArray();
2026
2027检查一个JSValueRef对象是否为类型化数组(TypedArray)。
2028
2029**参数:**
2030
2031无
2032
2033**返回值:**
2034
2035| 类型 | 说明 |
2036| ---- | ----------------------------------------------------------- |
2037| bool | 如果JSValueRef对象为类型化数组,返回true。否则,返回false。 |
2038
2039**示例:**
2040
2041```c++
2042int input = 123;
2043Local<JSValueRef> res = IntegerRef::New(vm_, input);
2044bool b = res->IsTypedArray();
2045```
2046
2047### IsDataView
2048
2049bool JSValueRef::IsDataView();
2050
2051判断一个JSValueRef对象是否为DataView类型。
2052
2053**参数:**
2054
2055无
2056
2057**返回值:**
2058
2059| 类型 | 说明 |
2060| ---- | ------------------------------------------------------------ |
2061| bool | 如果JSValueRef对象为DataViewRef类型,返回true。否则,返回false。 |
2062
2063**示例:**
2064
2065```c++
2066Local<JSValueRef> tag = DataViewRef::New(vm_,ArrayBufferRef::New(vm_,0),0,0);
2067bool b = tag->IsDataView();
2068```
2069
2070### IsBuffer
2071
2072bool JSValueRef::IsBuffer();
2073
2074判断一个JSValueRef对象是否为Buffer类型。
2075
2076**参数:**
2077
2078无
2079
2080**返回值:**
2081
2082| 类型 | 说明 |
2083| ---- | ----------------------------------------------------------- |
2084| bool | 如果JSValueRef对象为Buffer类型,返回true。否则,返回false。 |
2085
2086**示例:**
2087
2088```c++
2089int32_t length = 15;
2090Local<BufferRef> bufferRef = BufferRef::New(vm_, length);
2091bool b = bufferRef->IsBuffer();
2092```
2093
2094### IsArrayBuffer
2095
2096bool JSValueRef::IsArrayBuffer();
2097
2098判断一个JSValueRef对象是否为ArrayBuffer类型。
2099
2100**参数:**
2101
2102无
2103
2104**返回值:**
2105
2106| 类型 | 说明 |
2107| ---- | ------------------------------------------------------------ |
2108| bool | 如果JSValueRef对象为ArrayBuffer类型,返回true。否则,返回false。 |
2109
2110**示例:**
2111
2112```c++
2113Local<ArrayBufferRef> ConstructObjectArrBufRef(const EcmaVM *vm, const int32_t length_){
2114 // 构造一个ArrayBufferRef类型的对象arrayBuffer
2115 // ...
2116 return arrayBuffer; // 返回arrayBuffer
2117}
2118Local<ArrayBufferRef> arrayBuf = ConstructObjectArrBufRef(vm_, 15);
2119bool b = arrayBuf->IsArrayBuffer();
2120```
2121
2122### IsArray
2123
2124bool JSValueRef::IsArray(const EcmaVM *vm);
2125
2126判断一个JSValueRef对象是否为数组类型。
2127
2128**参数:**
2129
2130| 参数名 | 类型 | 必填 | 说明 |
2131| ------ | -------------- | ---- | ------------ |
2132| vm | const EcmaVM * | 是 | 虚拟机对象。 |
2133
2134**返回值:**
2135
2136| 类型 | 说明 |
2137| ---- | --------------------------------------------------------- |
2138| bool | 如果JSValueRef对象是数组类型,返回true。否则,返回false。 |
2139
2140**示例:**
2141
2142```c++
2143uint32_t length = 3;
2144Local<ArrayRef> arrayObject = ArrayRef::New(vm_, length);
2145bool b = arrayObject->IsArray(vm_);
2146```
2147
2148### ToObject
2149
2150Local<ObjectRef> JSValueRef::ToObject(const EcmaVM *vm);
2151
2152将一个JSValueRef对象转换为ObjectRef对象。
2153
2154**参数:**
2155
2156| 参数名 | 类型 | 必填 | 说明 |
2157| ------ | -------------- | ---- | ------------ |
2158| vm | const EcmaVM * | 是 | 虚拟机对象。 |
2159
2160**返回值:**
2161
2162| 类型 | 说明 |
2163| ---------------- | ----------------------------------- |
2164| Local<ObjectRef> | 返回转换后的 ObjectRef 类型的对象。 |
2165
2166**示例:**
2167
2168```c++
2169int input = 0;
2170Local<IntegerRef> intValue = IntegerRef::New(vm_, input);
2171Local<ObjectRef> object = intValue->ToObject(vm_);
2172```
2173
2174### ToNumber
2175
2176Local<NumberRef> JSValueRef::ToNumber(const EcmaVM *vm);
2177
2178将一个JSValueRef对象转换为NumberRef对象。
2179
2180**参数:**
2181
2182| 参数名 | 类型 | 必填 | 说明 |
2183| ------ | -------------- | ---- | ------------ |
2184| vm | const EcmaVM * | 是 | 虚拟机对象。 |
2185
2186**返回值:**
2187
2188| 类型 | 说明 |
2189| ---------------- | ----------------------------------- |
2190| Local<NumberRef> | 返回转换后的 NumberRef 类型的对象。 |
2191
2192**示例:**
2193
2194```c++
2195Local<StringRef> toString = StringRef::NewFromUtf8(vm_, "-123.3");
2196Local<JSValueRef> toValue(toString);
2197Local<NumberRef> number = toString->ToNumber(vm_);
2198```
2199
2200### ToBoolean
2201
2202Local<BooleanRef> JSValueRef::ToBoolean(const EcmaVM *vm);
2203
2204将一个JSValueRef对象转换为布尔值(BooleanRef)。
2205
2206**参数:**
2207
2208| 参数名 | 类型 | 必填 | 说明 |
2209| ------ | -------------- | ---- | ------------ |
2210| vm | const EcmaVM * | 是 | 虚拟机对象。 |
2211
2212**返回值:**
2213
2214| 类型 | 说明 |
2215| ----------------- | ------------------------------------ |
2216| Local<BooleanRef> | 返回转换后的 BooleanRef 类型的对象。 |
2217
2218**示例:**
2219
2220```c++
2221Local<IntegerRef> intValue = IntegerRef::New(vm_, 0);
2222Local<BooleanRef> boo = intValue->ToBoolean(vm_);
2223```
2224
2225### IsObject
2226
2227bool JSValueRef::IsObject();
2228
2229判断一个JSValueRef对象是否为Object类型。
2230
2231**参数:**
2232
2233无
2234
2235**返回值:**
2236
2237| 类型 | 说明 |
2238| ---- | ----------------------------------------------------------- |
2239| bool | 如果JSValueRef对象是Object类型,返回true。否则,返回false。 |
2240
2241**示例:**
2242
2243```c++
2244Local<JSValueRef> res = ObjectRef::New(vm_);
2245bool b = res->IsObject();
2246```
2247
2248### IsBigInt
2249
2250bool JSValueRef::IsBigInt();
2251
2252判断一个JSValueRef对象是否为BigInt类型。
2253
2254**参数:**
2255
2256无
2257
2258**返回值:**
2259
2260| 类型 | 说明 |
2261| ---- | ----------------------------------------------------------- |
2262| bool | 如果JSValueRef对象为BigInt类型,返回true。否则,返回false。 |
2263
2264**示例:**
2265
2266```c++
2267int input = 2147483646;
2268Local<IntegerRef> intValue = IntegerRef::New(vm_, input);
2269bool b = intValue->IsBigInt();
2270```
2271
2272### IsSymbol
2273
2274bool JSValueRef::IsSymbol();
2275
2276判断一个JSValueRef对象是否为Symbol类型。
2277
2278**参数:**
2279
2280无
2281
2282**返回值:**
2283
2284| 类型 | 说明 |
2285| ---- | ----------------------------------------------------------- |
2286| bool | 如果JSValueRef对象是Symbol类型,返回true。否则,返回false。 |
2287
2288**示例:**
2289
2290```c++
2291int input = 123;
2292Local<JSValueRef> res = IntegerRef::New(vm_,input);
2293bool b = res->IsSymbol();
2294```
2295
2296### IsUndefined
2297
2298bool JSValueRef::IsUndefined();
2299
2300判断一个JSValueRef对象是否为未定义类型。
2301
2302**参数:**
2303
2304无
2305
2306**返回值:**
2307
2308| 类型 | 说明 |
2309| ---- | ----------------------------------------------------------- |
2310| bool | 如果JSValueRef对象为未定义类型,返回true。否则,返回false。 |
2311
2312**示例:**
2313
2314```c++
2315Local<JSValueRef> tag = JSValueRef::Undefined(vm_);
2316bool b = tag->IsUndefined();
2317```
2318
2319
2320
2321### IsBoolean
2322
2323bool JSValueRef::IsBoolean();
2324
2325判断一个JSValueRef对象是否为布尔值。
2326
2327**参数:**
2328
2329无
2330
2331**返回值:**
2332
2333| 类型 | 说明 |
2334| ---- | ------------------------------------------------------- |
2335| bool | 如果JSValueRef对象为布尔值,返回true。否则,返回false。 |
2336
2337**示例:**
2338
2339```c++
2340Local<JSValueRef> tag = BooleanRef::New(vm_,false);
2341bool b = tag->IsBoolean();
2342```
2343
2344### IsNull
2345
2346bool JSValueRef::IsNull();
2347
2348判断一个JSValueRef对象是否为空。
2349
2350**参数:**
2351
2352无
2353
2354**返回值:**
2355
2356| 类型 | 说明 |
2357| ---- | --------------------------------------------------- |
2358| bool | 如果JSValueRef对象为空,返回true。否则,返回false。 |
2359
2360**示例:**
2361
2362```c++
2363Local<JSValueRef> tag = JSValueRef::Null(vm_);
2364bool b = tag->IsNull();
2365```
2366
2367
2368
2369### IsNativePointer
2370
2371bool JSValueRef::IsNativePointer();
2372
2373判断一个JSValueRef对象是否为本地指针。
2374
2375**参数:**
2376
2377无
2378
2379**返回值:**
2380
2381| 类型 | 说明 |
2382| ---- | --------------------------------------------------------- |
2383| bool | 如果JSValueRef对象为本地指针,返回true。否则,返回false。 |
2384
2385**示例:**
2386
2387```c++
2388void *vps = static_cast<void *>(new std::string("test"));
2389void *vps1 = static_cast<void *>(new std::string("test"));
2390Local<NativePointerRef> res_vps =
2391 NativePointerRef::New(vm_, vps, NativeAreaAllocator::FreeBufferFunc, vps1, 0);
2392bool b = res_vps->IsNativePointer();
2393```
2394
2395### IsFunction
2396
2397bool JSValueRef::IsFunction();
2398
2399判断一个JSValueRef对象是否为函数。
2400
2401**参数:**
2402
2403无
2404
2405**返回值:**
2406
2407| 类型 | 说明 |
2408| ---- | ----------------------------------------------------- |
2409| bool | 如果JSValueRef对象为函数,返回true。否则,返回false。 |
2410
2411**示例:**
2412
2413```c++
2414Local<FunctionRef> ConstructObjectFunctionRef(EcmaVM *vm, size_t nativeBindingsize){
2415 // 构造一个FunctionRef类型对象obj
2416 // ...
2417 return obj; // 返回obj
2418}
2419Local<FunctionRef> object = ConstructObjectFunctionRef(vm_, 15);
2420bool b = object->IsFunction();
2421```
2422
2423### IsString
2424
2425bool JSValueRef::IsString();
2426
2427判断一个JSValueRef对象是否为字符串。
2428
2429**参数:**
2430
2431无
2432
2433**返回值:**
2434
2435| 类型 | 说明 |
2436| ---- | ------------------------------------------------------- |
2437| bool | 如果JSValueRef对象为字符串,返回true。否则,返回false。 |
2438
2439**示例:**
2440
2441```c++
2442Local<JSValueRef> tag = StringRef::NewFromUtf8(vm_,"abc");
2443bool b = tag->IsString();
2444```
2445
2446### IsNumber
2447
2448bool JSValueRef::IsNumber();
2449
2450判断一个JSValueRef对象是否为数字。
2451
2452**参数:**
2453
2454无
2455
2456**返回值:**
2457
2458| 类型 | 说明 |
2459| ---- | ----------------------------------------------------- |
2460| bool | 如果JSValueRef对象为数字,返回true。否则,返回false。 |
2461
2462**示例:**
2463
2464```c++
2465Local<NumberRef> resUnit32 = NumberRef::New(vm_, inputUnit32);
2466bool b = resUnit32->IsNumber();
2467```
2468
2469### True
2470
2471static Local<PrimitiveRef> True(const EcmaVM *vm);
2472
2473检查一个值是否为True对象。
2474
2475**参数:**
2476
2477| 参数名 | 类型 | 必填 | 说明 |
2478| ------ | -------------- | ---- | ---------- |
2479| vm | const EcmaVM * | 是 | 虚拟机对象 |
2480
2481**返回值:**
2482
2483| 类型 | 说明 |
2484| :------------------ | :----------------------------------------------------------- |
2485| Local<PrimitiveRef> | 创建一个表示布尔值true的JSValueRef对象,转换为PrimitiveRef类型的本地引用,并返回。 |
2486
2487**示例:**
2488
2489```c++
2490Local<BooleanRef> boolValue = BooleanRef::New(vm_, true);
2491Local<PrimitiveRef> result = boolValue->True(vm_);
2492```
2493
2494### False
2495
2496static Local<PrimitiveRef> False(const EcmaVM *vm);
2497
2498检查一个值是否为False对象。
2499
2500**参数:**
2501
2502| 参数名 | 类型 | 必填 | 说明 |
2503| ------ | -------------- | ---- | ---------- |
2504| vm | const EcmaVM * | 是 | 虚拟机对象 |
2505
2506**返回值:**
2507
2508| 类型 | 说明 |
2509| :------------------ | :----------------------------------------------------------- |
2510| Local<PrimitiveRef> | 创建一个表示布尔值false的JSValueRef对象,转换为PrimitiveRef类型的本地引用,并返回。 |
2511
2512**示例:**
2513
2514```c++
2515Local<BooleanRef> boolValue = BooleanRef::New(vm_, false);
2516Local<PrimitiveRef> result = boolValue->True(vm_);
2517```
2518
2519### IsFalse
2520
2521bool IsFalse();
2522
2523用于判断该对象是否为False对象。
2524
2525**参数:**
2526
2527无
2528
2529**返回值:**
2530
2531| 类型 | 说明 |
2532| :------ | :--------------------------------------------- |
2533| boolean | 如果该对象为false,则返回true,否则返回false。 |
2534
2535**示例:**
2536
2537```c++
2538Local<BooleanRef> boolValue = BooleanRef::New(vm_, false);
2539bool result = boolValue->IsFalse();
2540```
2541
2542### IsJSArray
2543
2544bool IsJSArray(const EcmaVM *vm);
2545
2546用于判断是否为JS的数组类型。
2547
2548**参数:**
2549
2550| 参数名 | 类型 | 必填 | 说明 |
2551| ------ | -------------- | ---- | ---------- |
2552| vm | const EcmaVM * | 是 | 虚拟机对象 |
2553
2554**返回值:**
2555
2556| 类型 | 说明 |
2557| :------ | :---------------------------------------------------- |
2558| boolean | 如果该对象是JS的数组类型,则返回true,否则返回false。 |
2559
2560**示例:**
2561
2562```c++
2563JSArray *arr = JSArray::ArrayCreate(thread_, JSTaggedNumber(number)).GetObject<JSArray>();
2564JSHandle<JSTaggedValue> obj(thread_, arr);
2565Local<JSValueRef> JSArrayObject = JSNApiHelper::ToLocal<JSValueRef>(obj);
2566bool result = JSArrayObject->IsJSArray(vm_);
2567```
2568
2569### IsConstructor
2570
2571bool IsConstructor();
2572
2573用于判断是否为构造函数类型。
2574
2575**参数:**
2576
2577无
2578
2579**返回值:**
2580
2581| 类型 | 说明 |
2582| :------ | :---------------------------------------------------- |
2583| boolean | 如果该对象是构造函数类型,则返回true,否则返回false。 |
2584
2585**示例:**
2586
2587```c++
2588ObjectFactory *factory = vm_->GetFactory();
2589JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
2590JSHandle<JSFunction> func = factory->NewJSFunction(env, static_cast<void *>(nullptr), FunctionKind::BASE_CONSTRUCTOR);
2591JSHandle<JSObject> nullHandle(thread_, JSTaggedValue::Null());
2592JSHandle<JSObject> obj = JSObject::ObjectCreate(thread_, nullHandle);
2593JSHandle<JSTaggedValue> objValue(obj);
2594[[maybe_unused]] bool makeConstructor = JSFunction::MakeConstructor(thread_, func, objValue);
2595JSHandle<JSTaggedValue> funcHandle(func);
2596Local<JSValueRef> funConstructor = JSNApiHelper::ToLocal<JSValueRef>(funcHandle);
2597bool result = funConstructor->IsConstructor();
2598```
2599
2600### IsWeakRef
2601
2602bool IsWeakRef();
2603
2604用于判断是否为WeakRef对象。
2605
2606**参数:**
2607
2608无
2609
2610**返回值:**
2611
2612| 类型 | 说明 |
2613| :------ | :----------------------------------------------- |
2614| boolean | 如果该对象是WeakRef,则返回true,否则返回false。 |
2615
2616**示例:**
2617
2618```c++
2619JSFunction *jsFunc = vm_->GetGlobalEnv()->GetObjectFunction().GetObject<JSFunction>();
2620JSHandle<JSTaggedValue> jsFuncTagValue(thread, jsFunc);
2621JSHandle<JSObject> newObj = vm_->GetFactory()->NewJSObjectByConstructor(JSHandle<JSFunction>(jsFunc), jsFuncTagValue);
2622JSTaggedValue value(newObj);
2623value.CreateWeakRef();
2624bool result = JSNApiHelper::ToLocal<JSValueRef>(value);->IsWeakRef();
2625```
2626
2627### IsArrayIterator
2628
2629bool IsArrayIterator();
2630
2631用于判断该对象是否为数组迭代器。
2632
2633**参数:**
2634
2635无
2636
2637**返回值:**
2638
2639| 类型 | 说明 |
2640| :------ | :-------------------------------------------------- |
2641| boolean | 如果该对象是数组迭代器,则返回true,否则返回false。 |
2642
2643**示例:**
2644
2645```c++
2646ObjectFactory *factory = vm_->GetFactory();
2647JSHandle<TaggedArray> handleTaggedArrayFrom = vm_->GetFactory()->NewTaggedArray(arrayLength);
2648JSHandle<JSObject> handleJSObjectTaggedArrayFrom = JSArray::CreateArrayFromList(thread, handleTaggedArrayFrom);
2649JSHandle<JSArrayIterator> handleJSArrayIter =
2650 factory->NewJSArrayIterator(handleJSObjectTaggedArrayFrom,IterationKind::KEY);
2651JSHandle<JSTaggedValue> jsTagValue = JSHandle<JSTaggedValue>::Cast(handleJSArrayIter);
2652bool result = JSNApiHelper::ToLocal<JSValueRef>(jsTagValue)->IsStringIterator();
2653```
2654
2655### IsStringIterator
2656
2657bool IsStringIterator();
2658
2659用于判断该对象是否为字符串迭代器。
2660
2661**参数:**
2662
2663无
2664
2665**返回值:**
2666
2667| 类型 | 说明 |
2668| :------ | :------------------------------------------------------ |
2669| boolean | 如果该对象是字符串的迭代器,则返回true,否则返回false。 |
2670
2671**示例:**
2672
2673```c++
2674JSHandle<EcmaString> recordName = vm_->GetFactory()->NewFromUtf8("646458");
2675JSHandle<JSStringIterator> jsStringIter = JSStringIterator::CreateStringIterator(vm_->GetJSThread(), recordName);
2676JSHandle<JSTaggedValue> setTag = JSHandle<JSTaggedValue>::Cast(jsStringIter);
2677bool result = JSNApiHelper::ToLocal<StringRef>(setTag)->IsStringIterator();
2678```
2679
2680### IsJSPrimitiveInt
2681
2682bool IsJSPrimitiveInt();
2683
2684用于判断是否为JS的原始整数类型。
2685
2686**参数:**
2687
2688无
2689
2690**返回值:**
2691
2692| 类型 | 说明 |
2693| :------ | :-------------------------------------------------------- |
2694| boolean | 如果该对象是JS的原始整数类型,则返回true,否则返回false。 |
2695
2696**示例:**
2697
2698```c++
2699JSHandle<JSTaggedValue> jsTagValue;
2700JSHandle<JSPrimitiveRef> jsPrimitive =
2701 vm_->GetFactory()->NewJSPrimitiveRef(PrimitiveType::PRIMITIVE_BIGINT, jsTagValue);
2702JSHandle<JSTaggedValue> jsPriTagValue = JSHandle<JSTaggedValue>::Cast(jsPrimitive);
2703bool result = JSNApiHelper::ToLocal<JSValueRef>(jsPriTagValue)->IsJSPrimitiveInt();
2704```
2705
2706### IsTreeMap
2707
2708bool IsTreeMap();
2709
2710用于判断该对象是否为TreeMap类型。
2711
2712**参数:**
2713
2714无
2715
2716**返回值:**
2717
2718| 类型 | 说明 |
2719| :------ | :--------------------------------------------------- |
2720| boolean | 如果该对象是TreeMap类型,则返回true,否则返回false。 |
2721
2722**示例:**
2723
2724```c++
2725JSHandle<JSTaggedValue> proto = vm_->GetGlobalEnv()->GetObjectFunctionPrototype();
2726JSHandle<JSHClass> mapClass = vm_->GetFactory()->NewEcmaHClass(JSAPITreeMap::SIZE, JSType::JS_API_TREE_MAP, proto);
2727JSHandle<JSAPITreeMap> jsTreeMap = JSHandle<JSAPITreeMap>::Cast(factory->NewJSObjectWithInit(mapClass));
2728JSHandle<TaggedTreeMap> treeMap(thread, TaggedTreeMap::Create(thread));
2729jsTreeMap->SetTreeMap(thread, treeMap);
2730JSHandle<JSTaggedValue> treeMapTagValue = JSHandle<JSTaggedValue>::Cast(jsTreeMap);
2731bool result = JSNApiHelper::ToLocal<ArrayRef>(treeMapTagValue)->IsTreeMap();
2732```
2733
2734### IsTreeSet
2735
2736bool IsTreeSet();
2737
2738用于判断该对象是否为树集。
2739
2740**参数:**
2741
2742无
2743
2744**返回值:**
2745
2746| 类型 | 说明 |
2747| :------ | :-------------------------------------------- |
2748| boolean | 如果该对象是树集,则返回true,否则返回false。 |
2749
2750**示例:**
2751
2752```c++
2753JSHandle<JSTaggedValue> proto = vm_->GetGlobalEnv()->GetObjectFunctionPrototype();
2754JSHandle<JSHClass> setClass = vm_->GetFactory()->NewEcmaHClass(JSAPITreeSet::SIZE, JSType::JS_API_TREE_SET, proto);
2755JSHandle<JSAPITreeSet> jsTreeSet = JSHandle<JSAPITreeSet>::Cast(factory->NewJSObjectWithInit(setClass));
2756JSHandle<TaggedTreeSet> treeSet(thread, TaggedTreeSet::Create(thread));
2757jsTreeSet->SetTreeSet(thread, treeSet);
2758JSHandle<JSTaggedValue> treeSetTagValue = JSHandle<JSTaggedValue>::Cast(jsTreeSet);
2759bool result = JSNApiHelper::ToLocal<ArrayRef>(treeSetTagValue)->IsTreeSet();
2760```
2761
2762### IsVector
2763
2764bool IsVector();
2765
2766用于判断该对象是否为Vector容器。
2767
2768**参数:**
2769
2770无
2771
2772**返回值:**
2773
2774| 类型 | 说明 |
2775| :------ | :-------------------------------------------------- |
2776| boolean | 如果该对象是Vector容器,则返回true,否则返回false。 |
2777
2778**示例:**
2779
2780```c++
2781JSHandle<JSTaggedValue> proto = vm_->GetGlobalEnv()->GetFunctionPrototype();
2782JSHandle<JSHClass> vectorClass = vm_->GetFactory()->NewEcmaHClass(JSAPIVector::SIZE, JSType::JS_API_VECTOR, proto);
2783JSHandle<JSAPIVector> jsVector = JSHandle<JSAPIVector>::Cast(factory->NewJSObjectWithInit(vectorClass));
2784jsVector->SetLength(length);
2785JSHandle<JSTaggedValue> vectorTagValue = JSHandle<JSTaggedValue>::Cast(jsVector);
2786bool result = JSNApiHelper::ToLocal<ArrayRef>(vectorTagValue)->IsVector();
2787```
2788
2789### IsArgumentsObject
2790
2791bool IsArgumentsObject();
2792
2793用于判断该对象是否为参数对象。
2794
2795**参数:**
2796
2797无
2798
2799**返回值:**
2800
2801| 类型 | 说明 |
2802| :------ | :------------------------------------------------ |
2803| boolean | 如果该对象是参数对象,则返回true,否则返回false。 |
2804
2805**示例:**
2806
2807```c++
2808JSHandle<JSArguments> obj = vm_->GetFactory()->NewJSArguments();
2809JSHandle<JSTaggedValue> argumentTag = JSHandle<JSTaggedValue>::Cast(obj);
2810bool result = JSNApiHelper::ToLocal<ObjectRef>(argumentTag)->IsArgumentsObject();
2811```
2812
2813### IsAsyncFunction
2814
2815bool IsAsyncFunction();
2816
2817用于判断是否为异步函数。
2818
2819**参数:**
2820
2821无
2822
2823**返回值:**
2824
2825| 类型 | 说明 |
2826| :------ | :------------------------------------------ |
2827| boolean | 如果是异步函数,则返回true,否则返回false。 |
2828
2829**示例:**
2830
2831```c++
2832JSHandle<JSAsyncFuncObject> asyncFuncObj = vm_->GetFactory()->NewJSAsyncFuncObject();
2833JSHandle<JSTaggedValue> asyncFuncTag = JSHandle<JSTaggedValue>::Cast(asyncFuncObj);
2834bool result = JSNApiHelper::ToLocal<ObjectRef>(asyncFuncTag)->IsAsyncFunction();
2835```
2836
2837### IsGeneratorFunction
2838
2839bool IsGeneratorFunction();
2840
2841用于判断是否为生成器函数。
2842
2843**参数:**
2844
2845无
2846
2847**返回值:**
2848
2849| 类型 | 说明 |
2850| :------ | :-------------------------------------------------- |
2851| boolean | 如果该对象是生成器函数,则返回true,否则返回false。 |
2852
2853**示例:**
2854
2855```c++
2856JSHandle<JSTaggedValue> genFunc = vm_->GetGlobalEnv()->GetGeneratorFunctionFunction();
2857JSHandle<JSGeneratorObject> genObjHandleVal = vm_->GetFactory()->NewJSGeneratorObject(genFunc);
2858JSHandle<JSTaggedValue> genObjTagHandleVal = JSHandle<JSTaggedValue>::Cast(genObjHandleVal);
2859Local<GeneratorObjectRef> genObjectRef = JSNApiHelper::ToLocal<GeneratorObjectRef>(genObjTagHandleVal);
2860Local<JSValueRef> object = genObjectRef->GetGeneratorFunction(vm_);
2861bool result = res->IsGeneratorFunction();
2862```
2863
2864### IsBigInt64Array
2865
2866bool IsBigInt64Array();
2867
2868用于判断该对象是否为用于存储任意长度的有符号64位整数数组。
2869
2870**参数:**
2871
2872无
2873
2874**返回值:**
2875
2876| 类型 | 说明 |
2877| :------ | :----------------------------------------------------------- |
2878| boolean | 如果该对象是任意长度的有符号64位整数数组,则返回true,否则返回false。 |
2879
2880**示例:**
2881
2882```c++
2883Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, bufferLength);
2884Local<ObjectRef> object = BigInt64ArrayRef::New(vm_, buffer, bufferOffset, offsetLength);
2885bool result = object->IsBigInt64Array();
2886```
2887
2888### IsBigUint64Array
2889
2890bool IsBigUint64Array();
2891
2892用于判断该对象是否为用于存储任意长度的无符号64位整数数组。
2893
2894**参数:**
2895
2896无
2897
2898**返回值:**
2899
2900| 类型 | 说明 |
2901| :------ | :----------------------------------------------------------- |
2902| boolean | 如果该对象是任意长度的无符号64位整数数组,则返回true,否则返回false。 |
2903
2904**示例:**
2905
2906```c++
2907Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm_, 5);
2908Local<ObjectRef> object = BigUint64ArrayRef::New(vm_, buffer, bufferOffset, offsetLength);
2909bool result = object->IsBigUint64Array();
2910```
2911
2912### IsSharedArrayBuffer
2913
2914bool IsSharedArrayBuffer();
2915
2916用于判断该对象是否为共享的ArrayBuffer对象。
2917
2918**参数:**
2919
2920无
2921
2922**返回值:**
2923
2924| 类型 | 说明 |
2925| :------ | :--------------------------------------------------------- |
2926| boolean | 如果该对象是共享的ArrayBuffer,则返回true,否则返回false。 |
2927
2928**示例:**
2929
2930```c++
2931JSHandle<JSArrayBuffer> jsArrayBuffer = vm_->GetFactory()->NewJSSharedArrayBuffer(bufferLength);
2932JSHandle<JSTaggedValue> jsTagValueBuffer = JSHandle<JSTaggedValue>::Cast(jsArrayBuffer);
2933bool result = JSNApiHelper::ToLocal<ArrayRef>(jsTagValueBuffer)->IsSharedArrayBuffer();
2934```
2935
2936### IsUint8ClampedArray
2937
2938bool JSValueRef::IsUint8ClampedArray();
2939
2940判断对象是否为Uint8ClampedArray类型。
2941
2942**参数:**
2943
2944无
2945
2946**返回值:**
2947
2948| 类型 | 说明 |
2949| ---- | ---------------------------------------------------------- |
2950| bool | 如果调用对象的类型为Uint8ClampedArray返回True否则返回False |
2951
2952**示例:**
2953
2954```c++
2955Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm, arrayLenth);
2956Local<JSValueRef> val = Uint8ClampedArrayRef::New(vm, buffer, Offset, OffsetLenth);
2957bool res = val->IsUint8ClampedArray();
2958```
2959
2960### IsInt16Array
2961
2962bool JSValueRef::IsInt16Array();
2963
2964判断对象是否为Int16Array类型。
2965
2966**参数:**
2967
2968无
2969
2970**返回值:**
2971
2972| 类型 | 说明 |
2973| ---- | --------------------------------------------------- |
2974| bool | 如果调用对象的类型为Int16Array返回True否则返回False |
2975
2976**示例:**
2977
2978```c++
2979Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm, arrayLenth);
2980Local<JSValueRef> val = Int16ArrayRef::New(vm, buffer, Offset, OffsetLenth);
2981bool res = val->IsInt16Array();
2982```
2983
2984### IsUint16Array
2985
2986bool JSValueRef::IsUint16Array();
2987
2988判断对象是否为Uint16Array类型。
2989
2990**参数:**
2991
2992无
2993
2994**返回值:**
2995
2996| 类型 | 说明 |
2997| ---- | ---------------------------------------------------- |
2998| bool | 如果调用对象的类型为Uint16Array返回True否则返回False |
2999
3000**示例:**
3001
3002```c++
3003Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm, arrayLenth);
3004Local<JSValueRef> val = Uint16ArrayRef::New(vm, buffer, Offset, OffsetLenth);
3005bool res = val->IsUint16Array();
3006```
3007
3008### IsInt32Array
3009
3010bool JSValueRef::IsInt32Array();
3011
3012判断对象是否为Int32Array类型。
3013
3014**参数:**
3015
3016无
3017
3018**返回值:**
3019
3020| 类型 | 说明 |
3021| ---- | --------------------------------------------------- |
3022| bool | 如果调用对象的类型为Int32Array返回True否则返回False |
3023
3024**示例:**
3025
3026```c++
3027Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm, 30);
3028Local<JSValueRef> val = Int32ArrayRef::New(vm, buffer, 4, 6);
3029bool res = val->IsInt32Array();
3030```
3031
3032### IsUint32Array
3033
3034bool JSValueRef::IsUint32Array();
3035
3036判断对象是否为Uint32Array类型。
3037
3038**参数:**
3039
3040无
3041
3042**返回值:**
3043
3044| 类型 | 说明 |
3045| ---- | ---------------------------------------------------- |
3046| bool | 如果调用对象的类型为Uint32Array返回True否则返回False |
3047
3048**示例:**
3049
3050```c++
3051Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm, 30);
3052Local<JSValueRef> val = Uint32ArrayRef::New(vm, buffer, 4, 6);
3053bool res = val->IsUint32Array();
3054```
3055
3056### IsFloat32Array
3057
3058bool JSValueRef::IsFloat32Array();
3059
3060判断对象是否为Float32Array类型。
3061
3062**参数:**
3063
3064无
3065
3066**返回值:**
3067
3068| 类型 | 说明 |
3069| ---- | ----------------------------------------------------- |
3070| bool | 如果调用对象的类型为Float32Array返回True否则返回False |
3071
3072**示例:**
3073
3074```c++
3075Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm, 30);
3076Local<JSValueRef> val = Float32ArrayRef::New(vm, buffer, 4, 6);
3077bool res = val->IsFloat32Array();
3078```
3079
3080### IsFloat64Array
3081
3082bool JSValueRef::IsFloat64Array();
3083
3084判断对象是否为Float64Array类型。
3085
3086**参数:**
3087
3088无
3089
3090**返回值:**
3091
3092| 类型 | 说明 |
3093| ---- | ----------------------------------------------------- |
3094| bool | 如果调用对象的类型为Float64Array返回True否则返回False |
3095
3096**示例:**
3097
3098```c++
3099Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm, arrayLength);
3100Local<JSValueRef> val = Float64ArrayRef::New(vm, buffer, eOffset, eOffsetLength);
3101bool res = val->IsFloat64Array();
3102```
3103
3104### IsJSPrimitiveBoolean
3105
3106bool JSValueRef::IsJSPrimitiveBoolean();
3107
3108判断对象是否为JSPrimitiveBoolean类型。
3109
3110**参数:**
3111
3112无
3113
3114**返回值:**
3115
3116| 类型 | 说明 |
3117| ---- | ----------------------------------------------------------- |
3118| bool | 如果调用对象的类型为JSPrimitiveBoolean返回True否则返回False |
3119
3120**示例:**
3121
3122```c++
3123ObjectFactory *factory = vm->GetFactory();
3124 JSHandle<JSTaggedValue> jstagvalue;
3125 JSHandle<JSPrimitiveRef> jsprimitive = factory->NewJSPrimitiveRef(PrimitiveType::PRIMITIVE_BOOLEAN, jstagvalue);
3126 JSHandle<JSTaggedValue> jspri = JSHandle<JSTaggedValue>::Cast(jsprimitive);
3127 Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(jspri);
3128bool res = object->IsJSPrimitiveBoolean();
3129```
3130
3131### IsMapIterator
3132
3133bool JSValueRef::IsMapIterator();
3134
3135判断对象是否为MapIterator类型。
3136
3137**参数:**
3138
3139无
3140
3141**返回值:**
3142
3143| 类型 | 说明 |
3144| ---- | ---------------------------------------------------- |
3145| bool | 如果调用对象的类型为MapIterator返回True否则返回False |
3146
3147**示例:**
3148
3149```c++
3150JSHandle<GlobalEnv> env = thread_->GetEcmaVM()->GetGlobalEnv();
3151ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
3152JSHandle<JSTaggedValue> builtinsMapFunc = env->GetBuiltinsMapFunction();
3153JSHandle<JSMap> jsMap(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(builtinsMapFunc), builtinsMapFunc));
3154JSHandle<JSTaggedValue> linkedHashMap(LinkedHashMap::Create(thread_));
3155jsMap->SetLinkedMap(thread_, linkedHashMap);
3156JSHandle<JSTaggedValue> mapIteratorVal =
3157 JSMapIterator::CreateMapIterator(thread_, JSHandle<JSTaggedValue>::Cast(jsMap), IterationKind::KEY);
3158Local<MapIteratorRef> object = JSNApiHelper::ToLocal<MapIteratorRef>(mapIteratorVal);
3159bool res = object->IsMapIterator();
3160```
3161
3162### IsSetIterator
3163
3164bool JSValueRef::IsSetIterator();
3165
3166判断对象是否为SetIterator类型。
3167
3168**参数:**
3169
3170无
3171
3172**返回值:**
3173
3174| 类型 | 说明 |
3175| ---- | ---------------------------------------------------- |
3176| bool | 如果调用对象的类型为SetIterator返回True否则返回False |
3177
3178**示例:**
3179
3180```c++
3181ObjectFactory *factory = vm->GetFactory();
3182JSHandle<JSTaggedValue> proto = thread_->GetEcmaVM()->GetGlobalEnv()->GetFunctionPrototype();
3183JSHandle<JSHClass> setClass = factory->NewEcmaHClass(JSSet::SIZE, JSType::JS_SET, proto);
3184JSHandle<JSSet> jsSet = JSHandle<JSSet>::Cast(factory->NewJSObjectWithInit(setClass));
3185JSHandle<LinkedHashSet> linkedSet(LinkedHashSet::Create(thread_));
3186jsSet->SetLinkedSet(thread_, linkedSet);
3187JSHandle<JSSetIterator> jsSetIter = factory->NewJSSetIterator(jsSet, IterationKind::KEY);
3188JSHandle<JSTaggedValue> setIter = JSHandle<JSTaggedValue>::Cast(jsSetIter);
3189bool res = JSNApiHelper::ToLocal<JSValueRef>(setiter)->IsSetIterator();
3190```
3191
3192### IsModuleNamespaceObject
3193
3194bool JSValueRef::IsModuleNamespaceObject();
3195
3196判断对象是否为ModuleNamespaceObject类型。
3197
3198**参数:**
3199
3200无
3201
3202**返回值:**
3203
3204| 类型 | 说明 |
3205| ---- | ------------------------------------------------------------ |
3206| bool | 如果调用对象的类型为ModuleNamespaceObject返回True否则返回False |
3207
3208**示例:**
3209
3210```c++
3211ObjectFactory *factory = vm->GetFactory();
3212JSHandle<ModuleNamespace> moduleNamespace = factory->NewModuleNamespace();
3213JSHandle<JSTaggedValue> modname = JSHandle<JSTaggedValue>::Cast(moduleNamespace);
3214JSNApiHelper::ToLocal<ObjectRef>(modname)->IsModuleNamespaceObject();
3215bool res =object->IsModuleNamespaceObject()
3216```
3217
3218### IsProxy
3219
3220bool JSValueRef::IsProxy();
3221
3222判断对象是否为Proxy类型。
3223
3224**参数:**
3225
3226无
3227
3228**返回值:**
3229
3230| 类型 | 说明 |
3231| ---- | ---------------------------------------------- |
3232| bool | 如果调用对象的类型为Proxy返回True否则返回False |
3233
3234**示例:**
3235
3236```c++
3237Local<ProxyRef> tag = ProxyRef::New(vm);
3238bool res = tag->IsProxy();
3239```
3240
3241### IsRegExp
3242
3243bool JSValueRef::IsRegExp();
3244
3245判断对象是否为RegExp类型。
3246
3247**参数:**
3248
3249无
3250
3251**返回值:**
3252
3253| 类型 | 说明 |
3254| ---- | ----------------------------------------------- |
3255| bool | 如果调用对象的类型为RegExp返回True否则返回False |
3256
3257**示例:**
3258
3259```c++
3260Local<RegExp> val = RegExp::New(vm);
3261bool res = val->IsRegExp();
3262```
3263
3264### IsJSPrimitiveNumber
3265
3266bool JSValueRef::IsJSPrimitiveNumber();
3267
3268判断对象是否为JSPrimitiveNumber类型。
3269
3270**参数:**
3271
3272无
3273
3274**返回值:**
3275
3276| 类型 | 说明 |
3277| ---- | ---------------------------------------------------------- |
3278| bool | 如果调用对象的类型为JSPrimitiveNumber返回True否则返回False |
3279
3280**示例:**
3281
3282```c++
3283ObjectFactory *factory = vm->GetFactory();
3284JSHandle<JSTaggedValue> jstagvalue;
3285JSHandle<JSPrimitiveRef> jsprimitive = factory->NewJSPrimitiveRef(PrimitiveType::PRIMITIVE_NUMBER, jstagvalue);
3286JSHandle<JSTaggedValue> jspri = JSHandle<JSTaggedValue>::Cast(jsprimitive);
3287Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(jspri);
3288bool res = object->IsJSPrimitiveNumber();
3289```
3290
3291### IsMap
3292
3293bool JSValueRef::IsMap();
3294
3295判断对象是否为Map类型。
3296
3297**参数:**
3298
3299无
3300
3301**返回值:**
3302
3303| 类型 | 说明 |
3304| ---- | -------------------------------------------- |
3305| bool | 如果调用对象的类型为Map返回True否则返回False |
3306
3307**示例:**
3308
3309```c++
3310Local<MapRef> mapRef = MapRef::New(vm);
3311bool res = mapRef->IsMap();
3312```
3313
3314### IsSet
3315
3316bool JSValueRef::IsSet();
3317
3318判断对象是否为Set类型。
3319
3320**参数:**
3321
3322无
3323
3324**返回值:**
3325
3326| 类型 | 说明 |
3327| ---- | -------------------------------------------- |
3328| bool | 如果调用对象的类型为Set返回True否则返回False |
3329
3330**示例:**
3331
3332```c++
3333Local<SetRef> setRef = SetRef::New(vm);
3334bool res = setRef->IsSet();
3335```
3336
3337### IsJSPrimitiveString
3338
3339bool JSValueRef::IsJSPrimitiveString();
3340
3341判断对象是否为JSPrimitiveString类型。
3342
3343**参数:**
3344
3345无
3346
3347**返回值:**
3348
3349| 类型 | 说明 |
3350| ---- | ---------------------------------------------------------- |
3351| bool | 如果调用对象的类型为JSPrimitiveString返回True否则返回False |
3352
3353**示例:**
3354
3355```c++
3356ObjectFactory *factory = vm->GetFactory();
3357JSHandle<JSTaggedValue> jstagValue;
3358JSHandle<JSPrimitiveRef> jsprimitive = factory->NewJSPrimitiveRef(PrimitiveType::PRIMITIVE_STRING, jstagvalue);
3359JSHandle<JSTaggedValue> jspString = JSHandle<JSTaggedValue>::Cast(jsprimitive);
3360Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(jspString);
3361bool res = object->IsJSPrimitiveNumber();
3362```
3363
3364### IsJSPrimitiveSymbol
3365
3366bool JSValueRef::IsJSPrimitiveSymbol();
3367
3368判断对象是否为JSPrimitiveSymbol类型。
3369
3370**参数:**
3371
3372无
3373
3374**返回值:**
3375
3376| 类型 | 说明 |
3377| ---- | ---------------------------------------------------------- |
3378| bool | 如果调用对象的类型为JSPrimitiveSymbol返回True否则返回False |
3379
3380**示例:**
3381
3382```c++
3383ObjectFactory *factory = vm->GetFactory();
3384JSHandle<JSTaggedValue> jstagValue;
3385JSHandle<JSPrimitiveRef> jsprimitive = factory->NewJSPrimitiveRef(PrimitiveType::PRIMITIVE_SYMBOL, jstagvalue);
3386JSHandle<JSTaggedValue> jspSymbol = JSHandle<JSTaggedValue>::Cast(jsprimitive);
3387Local<JSValueRef> object = JSNApiHelper::ToLocal<JSValueRef>(jspSymbol);
3388bool res = object->IsJSPrimitiveNumber();
3389```
3390
3391### IsWeakMap
3392
3393bool JSValueRef::IsWeakMap();
3394
3395判断对象是否为WeakMap类型。
3396
3397**参数:**
3398
3399无
3400
3401**返回值:**
3402
3403| 类型 | 说明 |
3404| ---- | ------------------------------------------------ |
3405| bool | 如果调用对象的类型为WeakMap返回True否则返回False |
3406
3407**示例:**
3408
3409```c++
3410Local<JSValueRef> tag = WeakMapRef::New(vm);
3411bool res = tag->IsWeakMap();
3412```
3413
3414### IsWeakSet
3415
3416bool JSValueRef::IsWeakSet();
3417
3418判断对象是否为WeakSet类型。
3419
3420**参数:**
3421
3422无
3423
3424**返回值:**
3425
3426| 类型 | 说明 |
3427| ---- | ------------------------------------------------ |
3428| bool | 如果调用对象的类型为WeakSet返回True否则返回False |
3429
3430**示例:**
3431
3432```c++
3433Local<JSValueRef> tag = WeakSetRef::New(vm);
3434bool res = tag->IsWeakSet();
3435```
3436
3437
3438
3439## ObjectRef
3440
3441继承于JSValueRef,提供了一些方法,用于获取对象对象的一些JSValueRef类型的值。
3442
3443### New
3444
3445static Local<ObjectRef> New(const EcmaVM *vm);
3446
3447用于构造一个ObjectRef类的对象。
3448
3449**参数:**
3450
3451| 参数名 | 类型 | 必填 | 说明 |
3452| ------ | -------------- | ---- | ---------- |
3453| vm | const EcmaVM * | 是 | 虚拟机对象 |
3454
3455**返回值:**
3456
3457| 类型 | 说明 |
3458| :--------------- | :-------------------------------- |
3459| Local<ObjectRef> | 返回构造成功的ObjectRef类的对象。 |
3460
3461**示例:**
3462
3463```c++
3464 Local<ObjectRef> result = ObjectRef::New(vm_);
3465```
3466
3467### GetPrototype
3468
3469Local<JSValueRef> GetPrototype(const EcmaVM *vm);
3470
3471验证是否正确返回函数或对象的原型,并验证返回的原型是否为对象类型。
3472
3473**参数:**
3474
3475| 参数名 | 类型 | 必填 | 说明 |
3476| ------ | -------------- | ---- | ---------- |
3477| vm | const EcmaVM * | 是 | 虚拟机对象 |
3478
3479**返回值:**
3480
3481| 类型 | 说明 |
3482| :---------------- | :--------------------------------------------- |
3483| Local<JSValueRef> | 将获取到的对象原型转换为JSValueRef类型并返回。 |
3484
3485**示例:**
3486
3487```c++
3488Local<ObjectRef> object = ObjectRef::New(vm_);
3489Local<JSValueRef> result = object->GetPrototype(vm_);
3490```
3491
3492### GetOwnPropertyNames
3493
3494Local<ArrayRef> GetOwnPropertyNames(const EcmaVM *vm);
3495
3496用于获取该对象所有的自有属性名称。
3497
3498**参数:**
3499
3500| 参数名 | 类型 | 必填 | 说明 |
3501| ------ | -------------- | ---- | ---------- |
3502| vm | const EcmaVM * | 是 | 虚拟机对象 |
3503
3504**返回值:**
3505
3506| 类型 | 说明 |
3507| :-------------- | :------------------------------------- |
3508| Local<ArrayRef> | 返回存储该对象所有自由属性名称的数组。 |
3509
3510**示例:**
3511
3512```c++
3513Local<ObjectRef> object = ObjectRef::New(vm_);
3514Local<JSValueRef> value = ObjectRef::New(vm_);
3515PropertyAttribute attribute(value, true, true, true);
3516Local<ArrayRef> result = object->GetOwnPropertyNames(vm_);
3517```
3518
3519### Set
3520
3521bool Set(const EcmaVM *vm, uint32_t key, Local<JSValueRef> value);
3522
3523用于设置ObjectRef对象的属性值。
3524
3525**参数:**
3526
3527| 参数名 | 类型 | 必填 | 说明 |
3528| ------ | ----------------- | ---- | ------------------ |
3529| vm | const EcmaVM * | 是 | 虚拟机对象 |
3530| key | uint32_t | 是 | 指定的key值 |
3531| value | Local<JSValueRef> | 是 | key值对应的value值 |
3532
3533**返回值:**
3534
3535| 类型 | 说明 |
3536| :------ | :--------------------------------------------------------- |
3537| boolean | ObjectRef对象的属性值设置成功,则返回true,否则返回false。 |
3538
3539**示例:**
3540
3541```c++
3542Local<FunctionRef> object = ObjectRef::New(vm_);
3543Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
3544Local<JSValueRef> value = ObjectRef::New(vm_);
3545bool result = object->Set(vm_, key, value);
3546```
3547
3548### Has
3549
3550bool Has(const EcmaVM *vm, Local<JSValueRef> key);
3551
3552用于检查ObjectRef对象是否具有指定的键。
3553
3554**参数:**
3555
3556| 参数名 | 类型 | 必填 | 说明 |
3557| ------ | ----------------- | ---- | ----------- |
3558| vm | const EcmaVM * | 是 | 虚拟机对象 |
3559| key | Local<JSValueRef> | 是 | 指定的key值 |
3560
3561**返回值:**
3562
3563| 类型 | 说明 |
3564| :------ | :----------------------------------------------------------- |
3565| boolean | 如果该ObjectRef对象具有指定的键,则返回true,否则返回false。 |
3566
3567**示例:**
3568
3569```c++
3570Local<ObjectRef> object = ObjectRef::New(vm_);
3571Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
3572bool result = object->Has(vm_, key);
3573```
3574
3575### Delete
3576
3577bool Delete(const EcmaVM *vm, Local<JSValueRef> key);
3578
3579用于根据指定的键值删除ObjectRef对象的属性值。
3580
3581**参数:**
3582
3583| 参数名 | 类型 | 必填 | 说明 |
3584| ------ | ----------------- | ---- | ----------- |
3585| vm | const EcmaVM * | 是 | 虚拟机对象 |
3586| key | Local<JSValueRef> | 是 | 指定的key值 |
3587
3588**返回值:**
3589
3590| 类型 | 说明 |
3591| :------ | :----------------------------------------------------------- |
3592| boolean | ObjectRef对象的属性值成功被删除,则返回true,否则返回false。 |
3593
3594**示例:**
3595
3596```c++
3597Local<ObjectRef> object = ObjectRef::New(vm_, reinterpret_cast<void *>(detach1), reinterpret_cast<void *>(attach1));
3598Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
3599bool result = object->Delete(vm_, key);
3600```
3601
3602### Get
3603
3604Local<JSValueRef> Get(const EcmaVM *vm, int32_t key);
3605
3606根据指定的key值获取对象的value值。
3607
3608**参数:**
3609
3610| 参数名 | 类型 | 必填 | 说明 |
3611| ------ | -------------- | ---- | ----------- |
3612| vm | const EcmaVM * | 是 | 虚拟机对象 |
3613| key | int32_t | 是 | 指定的key值 |
3614
3615**返回值:**
3616
3617| 类型 | 说明 |
3618| :---------------- | :------------------------------------- |
3619| Local<JSValueRef> | 返回值为根据指定的key值获取的value值。 |
3620
3621**示例:**
3622
3623```c++
3624Local<FunctionRef> object = ObjectRef::New(vm_);
3625int32_t key = 123;
3626Local<JSValueRef> result = object->Get(vm_, key);
3627```
3628
3629### Delete
3630
3631bool Delete(const EcmaVM *vm, uint32_t key);
3632
3633用于根据指定的键值删除ObjectRef对象的属性值。
3634
3635**参数:**
3636
3637| 参数名 | 类型 | 必填 | 说明 |
3638| ------ | -------------- | ---- | ----------- |
3639| vm | const EcmaVM * | 是 | 虚拟机对象 |
3640| key | uint32_t | 是 | 指定的key值 |
3641
3642**返回值:**
3643
3644| 类型 | 说明 |
3645| :------ | :----------------------------------------------------------- |
3646| boolean | ObjectRef对象的属性值成功被删除,则返回true,否则返回false。 |
3647
3648**示例:**
3649
3650```c++
3651Local<ObjectRef> object = ObjectRef::New(vm_, reinterpret_cast<void *>(detach1), reinterpret_cast<void *>(attach1));
3652uint32_t key = 123;
3653bool result = object->Delete(vm_, key);
3654```
3655
3656### DefineProperty
3657
3658bool DefineProperty(const EcmaVM *vm, Local<JSValueRef> key, PropertyAttribute attribute);
3659
3660用于设置Key值及对应的属性值。
3661
3662**参数:**
3663
3664| 参数名 | 类型 | 必填 | 说明 |
3665| --------- | ----------------- | ---- | -------------- |
3666| vm | const EcmaVM * | 是 | 虚拟机对象 |
3667| key | Local<JSValueRef> | 是 | 指定的key值 |
3668| attribute | PropertyAttribute | 是 | 要设置的属性值 |
3669
3670**返回值:**
3671
3672| 类型 | 说明 |
3673| :------ | :--------------------------------------------------------- |
3674| boolean | ObjectRef对象的属性值设置成功,则返回true,否则返回false。 |
3675
3676**示例:**
3677
3678```c++
3679Local<ObjectRef> object = ObjectRef::New(vm_, reinterpret_cast<void *>(detach1), reinterpret_cast<void *>(attach1));
3680Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
3681Local<JSValueRef> value = ObjectRef::New(vm_);
3682PropertyAttribute attribute(value, true, true, true);
3683bool result = object->DefineProperty(vm_, key, attribute);
3684```
3685
3686### GetAllPropertyNames
3687
3688Local<ArrayRef> GetAllPropertyNames(const EcmaVM *vm, uint32_t filter);
3689
3690用于获取对象的所有属性名,并返回一个Local<ArrayRef>类型的结果。
3691
3692**参数:**
3693
3694| 参数名 | 类型 | 必填 | 说明 |
3695| ------ | -------------- | ---- | -------------- |
3696| vm | const EcmaVM * | 是 | 虚拟机对象 |
3697| filter | uint32_t | 是 | 指定的过滤条件 |
3698
3699**返回值:**
3700
3701| 类型 | 说明 |
3702| :-------------- | :--------------------------- |
3703| Local<ArrayRef> | 返回值为获取到的所有属性名。 |
3704
3705**示例:**
3706
3707```c++
3708Local<ObjectRef> object = ObjectRef::New(vm_);
3709uint32_t filter = 123;
3710Local<ArrayRef> result = object->GetAllPropertyNames(vm_, filter);
3711```
3712
3713### GetOwnEnumerablePropertyNames
3714
3715Local<ArrayRef> GetOwnEnumerablePropertyNames(const EcmaVM *vm);
3716
3717获取对象自身的所有可枚举属性名,并返回一个Local<ArrayRef>类型的结果。
3718
3719**参数:**
3720
3721| 参数名 | 类型 | 必填 | 说明 |
3722| ------ | -------------- | ---- | ---------- |
3723| vm | const EcmaVM * | 是 | 虚拟机对象 |
3724
3725**返回值:**
3726
3727| 类型 | 说明 |
3728| :-------------- | :--------------------------------- |
3729| Local<ArrayRef> | 返回值为获取到的所有可枚举属性名。 |
3730
3731**示例:**
3732
3733```c++
3734Local<ObjectRef> object = ObjectRef::New(vm_);
3735Local<ArrayRef> result = object->GetOwnEnumerablePropertyNames(vm_);
3736```
3737
3738### Get
3739
3740Local<JSValueRef> ObjectRef::Get(const EcmaVM *vm, Local<JSValueRef> key);
3741
3742从一个JavaScript对象中获取一个属性的值。
3743
3744**参数:**
3745
3746| 参数名 | 类型 | 必填 | 说明 |
3747| ------ | ----------------- | ---- | ---------------------------------------------------------- |
3748| vm | const EcmaVM * | 是 | 虚拟机对象。 |
3749| key | Local<JSValueRef> | 是 | 要获取的属性的键。这个键可以是字符串、数字或其他类型的值。 |
3750
3751**返回值:**
3752
3753| 类型 | 说明 |
3754| ----------------- | ------------------------------------------------------------ |
3755| Local<JSValueRef> | 将获取到的属性值转换为JSValueRef类型,并通过scope.Escape(JSNApiHelper::ToLocal<JSValueRef>(ret.GetValue()))将其转回局部变量,并返回该值。 |
3756
3757**示例:**
3758
3759```c++
3760Local<FunctionRef> object = ObjectRef::New(vm_);
3761int32_t key = 123;
3762Local<JSValueRef> value = object->Get(vm_, key);
3763```
3764
3765### GetOwnProperty
3766
3767获取对象的属性。
3768
3769bool ObjectRef::GetOwnProperty(const EcmaVM *vm, Local<JSValueRef> key, PropertyAttribute &property);
3770
3771**参数:**
3772
3773| 参数名 | 类型 | 必填 | 说明 |
3774| -------- | ------------------- | ---- | ---------------------------- |
3775| vm | const EcmaVM * | 是 | 虚拟机对象。 |
3776| key | Local<JSValueRef> | 是 | 要获取的属性的键。 |
3777| property | PropertyAttribute & | 是 | 用于存储获取到的属性的信息。 |
3778
3779**返回值:**
3780
3781| 类型 | 说明 |
3782| ---- | ------------------------------------------------------------ |
3783| bool | 如果成功获取到属性描述符,函数会将属性值、getter、setter、可写性、可枚举性和可配置性等信息设置到property对象中。最后,返回`true`表示成功获取属性。否则,返回false。 |
3784
3785**示例:**
3786
3787```c++
3788Local<ObjectRef> object = ObjectRef::New(vm_);
3789Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
3790Local<JSValueRef> value = ObjectRef::New(vm_);
3791PropertyAttribute attribute(value, true, true, true);
3792bool b = object->GetOwnProperty(vm_, key, attribute);
3793```
3794
3795### SetAccessorProperty
3796
3797bool ObjectRef::SetAccessorProperty(const EcmaVM *vm, Local<JSValueRef> key, Local<FunctionRef> getter, Local<FunctionRef> setter, PropertyAttribute attribute);
3798
3799设置对象的属性。
3800
3801**参数:**
3802
3803| 参数名 | 类型 | 必填 | 说明 |
3804| --------- | ------------------ | ---- | ------------------------------------------------ |
3805| vm | const EcmaVM * | 是 | 虚拟机对象。 |
3806| key | Local<JSValueRef> | 是 | 要设置的属性的键。 |
3807| getter | Local<FunctionRef> | 是 | 表示属性的getter函数。 |
3808| setter | Local<FunctionRef> | 是 | 表示属性的setter函数。 |
3809| attribute | PropertyAttribute | 是 | 表示属性的特性(如可写性、可枚举性和可配置性)。 |
3810
3811**返回值:**
3812
3813| 类型 | 说明 |
3814| ---- | ------------------------------------------------------------ |
3815| bool | 表示是否成功设置了属性。如果设置成功,返回true。否则,返回false。 |
3816
3817**示例:**
3818
3819```c++
3820Local<FunctionRef> object = ObjectRef::New(vm_);
3821Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
3822Local<FunctionRef> target1 = FunctionRef::New(vm_, nullptr);
3823Local<FunctionRef> target2 = FunctionRef::New(vm_, nullptr);
3824bool b = object->SetAccessorProperty(vm_, key, target1, target2);
3825```
3826
3827### GetNativePointerField
3828
3829void *ObjectRef::GetNativePointerField(int32_t index);
3830
3831获取一个对象的指定索引处的原生指针字段。
3832
3833**参数:**
3834
3835| 参数名 | 类型 | 必填 | 说明 |
3836| ------ | ------- | ---- | ------------------------------------ |
3837| index | int32_t | 是 | 用于指定要获取的原生指针字段的索引。 |
3838
3839**返回值:**
3840
3841| 类型 | 说明 |
3842| ------ | -------------------------------- |
3843| void * | 表示返回一个指向任意类型的指针。 |
3844
3845**示例:**
3846
3847```c++
3848Local<ObjectRef> object = ObjectRef::New(vm_);
3849NativePointerCallback callBack = nullptr;
3850void *vp1 = static_cast<void *>(new std::string("test"));
3851void *vp2 = static_cast<void *>(new std::string("test"));
3852object->SetNativePointerField(33, vp1, callBack, vp2);
3853void *ptr = object.GetNativePointerField(33);
3854```
3855
3856### SetNativePointerFieldCount
3857
3858void ObjectRef::SetNativePointerFieldCount(int32_t count);
3859
3860设置一个对象的本地指针字段的数量。
3861
3862**参数:**
3863
3864| 参数名 | 类型 | 必填 | 说明 |
3865| ------ | ------- | ---- | -------------------------------- |
3866| count | int32_t | 是 | 指定要设置的本地指针字段的数量。 |
3867
3868**返回值:**
3869
3870无
3871
3872**示例:**
3873
3874```c++
3875Local<ObjectRef> object = ObjectRef::New(vm_);
3876int32_t input = 34;
3877object->SetNativePointerFieldCount(input);
3878```
3879
3880### set
3881
3882bool Set(const EcmaVM *vm, Local<JSValueRef> key, Local<JSValueRef> value);
3883
3884bool Set(const EcmaVM *vm, uint32_t key, Local<JSValueRef> value);
3885
3886在当前 `ObjectRef` 对象中设置键值对。
3887
3888在设置之前,通过 `CHECK_HAS_PENDING_EXCEPTION` 宏检查是否存在潜在的异常。
3889
3890使用 `JSNApiHelper::ToJSHandle(this)` 将当前的 `ObjectRef` 对象转换为 JavaScript 中的 `JSTaggedValue` 对象。
3891
3892使用 `JSNApiHelper::ToJSHandle(key)` 和 `JSNApiHelper::ToJSHandle(value)` 将键和值转换为 JavaScript 中的 `JSTaggedValue` 对象。
3893
3894调用 `JSTaggedValue::SetProperty` 方法在对象中设置键值对。
3895
3896**参数:**
3897
3898| 参数名 | 类型 | 必填 | 说明 |
3899| ------- | ----------------- | ---- | ---------------- |
3900| vm | const EcmaVM * | 是 | 虚拟机对象。 |
3901| key | Local<JSValueRef> | 是 | 表示要设置的键。 |
3902| key | uint32_t | 是 | 表示要设置的键。 |
3903| value | Local<JSValueRef> | 是 | 表示要设置的值。 |
3904
3905**返回值:**
3906
3907| 类型 | 说明 |
3908| ---- | --------------------------- |
3909| bool | 设置成功返回True反之False。 |
3910
3911**示例:**
3912
3913```c++
3914Local<ObjectRef> object = ObjectRef::New(vm_);
3915Local<StringRef> toString = StringRef::NewFromUtf8(vm_, "-123.3");
3916Local<JSValueRef> toValue(toString);
3917bool res = object->Set(vm_, key, toValue);
3918bool res = object->Set(vm_, toValue, toValue);
3919```
3920
3921### Has
3922
3923bool Has(const EcmaVM *vm, uint32_t key);
3924
3925 检查当前 `ObjectRef` 对象是否包含指定键的属性。
3926
3927 在检查之前,通过 `CHECK_HAS_PENDING_EXCEPTION` 宏检查是否存在潜在的异常。
3928
3929使用 `JSNApiHelper::ToJSHandle(this)` 将当前的 `ObjectRef` 对象转换为 JavaScript 中的 `JSTaggedValue` 对象。
3930
3931调用 `JSTaggedValue::HasProperty` 方法检查对象是否包含指定键的属性。
3932
3933**参数:**
3934
3935| 参数名 | 类型 | 必填 | 说明 |
3936| ------ | -------------- | ---- | -------------------- |
3937| vm | const EcmaVM * | 是 | 虚拟机对象。 |
3938| key | uint32_t | 是 | 表示要检查的属性键。 |
3939
3940**返回值:**
3941
3942| 类型 | 说明 |
3943| ---- | ------------------------- |
3944| bool | 如果有返回True反之False。 |
3945
3946**示例:**
3947
3948```c++
3949Local<ObjectRef> object = ObjectRef::New(vm_);
3950Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
3951bool res = object->Has(vm_, key);
3952```
3953
3954### SetNativePointerField
3955
3956void SetNativePointerField(int32_t index,void *nativePointer = nullptr,NativePointerCallback callBack = nullptr,void *data = nullptr, size_t nativeBindingsize = 0);
3957
3958在当前 `ObjectRef` 对象中设置指定索引的本机指针字段。
3959
3960在设置之前,通过 `LOG_IF_SPECIAL` 宏检查是否存在潜在的异常。
3961
3962使用 `JSNApiHelper::ToJSHandle(this)` 将当前的 `ObjectRef` 对象转换为 JavaScript 中的 `JSObject` 对象。
3963
3964调用 `JSObject::SetNativePointerField` 方法设置本机指针字段。
3965
3966**参数:**
3967
3968| 参数名 | 类型 | 必填 | 说明 |
3969| ----------------- | --------------------- | ---- | -------------------------------- |
3970| index | int32_t | 是 | 表示要设置的本机指针字段的索引。 |
3971| nativePointer | void* | 否 | 表示要设置的本机指针。 |
3972| callBack | NativePointerCallback | 否 | 表示本机指针的回调函数。 |
3973| data | void* | 否 | 表示与本机指针相关联的数据。 |
3974| nativeBindingsize | size_t | 是 | 表示本机绑定的大小。 |
3975
3976**返回值:**
3977
3978无
3979
3980**示例:**
3981
3982```c++
3983NativePointerCallback callBack = nullptr;
3984void *vp1 = static_cast<void*>(new std::string("test"));
3985void *vp2 = static_cast<void*>(new std::string("test"));
3986object->SetNativePointerField(index, vp1, callBack, vp2);
3987```
3988
3989### Freeze
3990
3991static void TriggerGC(const EcmaVM *vm, TRIGGER_GC_TYPE gcType = TRIGGER_GC_TYPE::SEMI_GC);
3992
3993该函数用于触发垃圾回收(GC)操作,可以选择不同的垃圾回收类型。
3994
3995通过调用虚拟机的 CollectGarbage 方法执行垃圾回收操作。
3996
3997在触发垃圾回收之前,通过 CHECK_HAS_PENDING_EXCEPTION_WITHOUT_RETURN 宏检查是否存在潜在的异常。
3998
3999**参数:**
4000
4001| 参数名 | 类型 | 必填 | 说明 |
4002| -------- | --------------- | ---- | ---------------------------------------------- |
4003| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4004| gcType | TRIGGER_GC_TYPE | 否 | 是一个枚举类型,表示触发GC(垃圾回收)的类型。 |
4005
4006**返回值:**
4007
4008无
4009
4010**示例:**
4011
4012```c++
4013JSNApi::TriggerGC(vm);
4014```
4015
4016### Seal
4017
4018static void TriggerGC(const EcmaVM *vm, TRIGGER_GC_TYPE gcType = TRIGGER_GC_TYPE::SEMI_GC);
4019
4020该函数用于触发垃圾回收(GC)操作,可以选择不同的垃圾回收类型。
4021
4022通过调用虚拟机的 CollectGarbage 方法执行垃圾回收操作。
4023
4024在触发垃圾回收之前,通过 CHECK_HAS_PENDING_EXCEPTION_WITHOUT_RETURN 宏检查是否存在潜在的异常。
4025
4026**参数:**
4027
4028| 参数名 | 类型 | 必填 | 说明 |
4029| -------- | --------------- | ---- | ---------------------------------------------- |
4030| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4031| gcType | TRIGGER_GC_TYPE | 否 | 是一个枚举类型,表示触发GC(垃圾回收)的类型。 |
4032
4033**返回值:**
4034
4035无
4036
4037**示例:**
4038
4039```c++
4040JSNApi::TriggerGC(vm);
4041```
4042
4043### New
4044
4045Local<ObjectRef> ObjectRef::New(const EcmaVM *vm);
4046
4047创建一个新的 JavaScript 对象,并返回对该对象的本地引用。
4048
4049在创建之前,通过 `CHECK_HAS_PENDING_EXCEPTION_RETURN_UNDEFINED` 宏检查是否存在潜在的异常。
4050
4051获取虚拟机的工厂对象和全局环境。
4052
4053使用全局环境中的 `GetObjectFunction` 函数获取对象构造函数。
4054
4055调用工厂的 `NewJSObjectByConstructor` 方法创建新的 JavaScript 对象。
4056
4057**参数:**
4058
4059| 参数名 | 类型 | 必填 | 说明 |
4060| ------ | -------------- | ---- | ------------ |
4061| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4062
4063**返回值:**
4064
4065| 类型 | 说明 |
4066| ---------------- | -------------------------- |
4067| Local<ObjectRef> | 返回新的 JavaScript 对象。 |
4068
4069**示例:**
4070
4071```c++
4072Local<ObjectRef> myObject = ObjectRef::New(vm);
4073```
4074
4075### SetPrototype
4076
4077bool ObjectRef::SetPrototype(const EcmaVM *vm, Local<ObjectRef> prototype)
4078
4079设置当前 `ObjectRef` 对象的原型为指定的 `prototype` 对象。
4080
4081在设置之前,通过 `LOG_IF_SPECIAL` 宏检查是否存在潜在的异常。
4082
4083使用 `JSNApiHelper::ToJSHandle(this)` 将当前的 `ObjectRef` 对象转换为 JavaScript 中的 `JSObject` 对象。
4084
4085使用 `JSNApiHelper::ToJSHandle(prototype)` 将传入的 `prototype` 对象转换为 JavaScript 中的 `JSObject` 对象。
4086
4087调用 `JSTaggedValue::SetPrototype` 方法设置对象的原型。
4088
4089**参数:**
4090
4091| 参数名 | 类型 | 必填 | 说明 |
4092| --------- | ---------------- | ---- | ---------------------- |
4093| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4094| prototype | Local<ObjectRef> | 是 | 表示要设置的原型对象。 |
4095
4096**返回值:**
4097
4098| 类型 | 说明 |
4099| ---- | --------------------------- |
4100| bool | 设置成功返回True反之False。 |
4101
4102**示例:**
4103
4104```c++
4105Local<ObjectRef> object = ObjectRef::New(vm_);
4106Local<ObjectRef> prototype = object->GetPrototype(vm_);
4107object->SetPrototype(vm_, prototype);
4108```
4109
4110 static Local<PromiseCapabilityRef> New(const EcmaVM *vm);
4111
4112
4113
4114## FunctionRef
4115
4116提供方法将函数封装为一个对象,以及对封装函数的调用。
4117
4118### New
4119
4120Local<FunctionRef> FunctionRef::New(EcmaVM *vm, FunctionCallback nativeFunc, NativePointerCallback deleter, void *data, bool callNapi, size_t nativeBindingsize);
4121
4122创建一个新的函数对象。
4123
4124**参数:**
4125
4126| 参数名 | 类型 | 必填 | 说明 |
4127| :---------------: | ---------------- | ---- | ------------------------------------------------------------ |
4128| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
4129| nativeFunc | FunctionCallback | 是 | 一个回调函数,当JS调用这个本地函数时,将调用这个回调函。 |
4130| deleter | NativePointerCallback | 否 | 一个删除器函数,用于在不再需要`FunctionRef`对象时释放其资源。 |
4131| data | void * | 否 | 一个可选的指针,可以传递给回调函数或删除器函数。 |
4132| callNapi | bool | 否 | 一个布尔值,表示是否在创建`FunctionRef`对象时立即调用回调函数。如果为`true`,则在创建对象时立即调用回调函数;如果为`false`,则需要手动调用回调函数。 |
4133| nativeBindingsize | size_t | 否 | 表示nativeFunc函数的大小,0表示未知大小。 |
4134
4135**返回值:**
4136
4137| 类型 | 说明 |
4138| ------------------ | ------------------------ |
4139| Local<FunctionRef> | 返回为一个新的函数对象。 |
4140
4141**示例:**
4142
4143```C++
4144Local<JSValueRef> FunCallback(JsiRuntimeCallInfo *info)
4145{
4146 EscapeLocalScope scope(info->GetVM());
4147 return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
4148}
4149Local<FunctionRef> callback = FunctionRef::New(vm, FunCallback);
4150```
4151
4152### NewClassFunction
4153
4154Local<FunctionRef> FunctionRef::NewClassFunction(EcmaVM *vm, FunctionCallback nativeFunc, NativePointerCallback deleter, void *data, bool callNapi, size_t nativeBindingsize);
4155
4156创建一个新的类函数对象。
4157
4158**参数:**
4159
4160| 参数名 | 类型 | 必填 | 说明 |
4161| :---------------: | ---------------- | ---- | ------------------------------------------------------------ |
4162| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
4163| nativeFunc | FunctionCallback | 是 | 一个回调函数,当JS调用这个本地函数时,将调用这个回调函。 |
4164| deleter | NativePointerCallback | 否 | 一个删除器函数,用于在不再需要`FunctionRef`对象时释放其资源。 |
4165| data | void * | 否 | 一个可选的指针,可以传递给回调函数或删除器函数。 |
4166| callNapi | bool | 否 | 一个布尔值,表示是否在创建`FunctionRef`对象时立即调用回调函数。如果为`true`,则在创建对象时立即调用回调函数;如果为`false`,则需要手动调用回调函数。 |
4167| nativeBindingsize | size_t | 否 | 表示nativeFunc函数的大小,0表示未知大小。 |
4168
4169**返回值:**
4170
4171| 类型 | 说明 |
4172| ------------------ | ------------------------ |
4173| Local<FunctionRef> | 返回为一个新的函数对象。 |
4174
4175**示例:**
4176
4177```C++
4178Local<JSValueRef> FunCallback(JsiRuntimeCallInfo *info)
4179{
4180 EscapeLocalScope scope(info->GetVM());
4181 return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
4182}
4183NativePointerCallback deleter = nullptr;
4184void *cb = reinterpret_cast<void *>(BuiltinsFunction::FunctionPrototypeInvokeSelf);
4185bool callNative = true;
4186size_t nativeBindingSize = 15;
4187Local<FunctionRef> obj(FunctionRef::NewClassFunction(vm, FunCallback, deleter, cb, callNative, nativeBindingSize));
4188```
4189
4190### Call
4191
4192Local<JSValueRef> FunctionRef::Call(const EcmaVM *vm, Local<JSValueRef> thisObj, const Local<JSValueRef> argv[], int32_t length);
4193
4194设置指定对象调用FunctionRef对象设置的回调函数。
4195
4196**参数:**
4197
4198| 参数名 | 类型 | 必填 | 说明 |
4199| :-----: | ----------------------- | ---- | ------------------------------- |
4200| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
4201| thisObj | FunctionCallback | 是 | 指定调用回调函数的对象。 |
4202| argv[] | const Local<JSValueRef> | 否 | Local<JSValueRef>对象数组。 |
4203| length | int32_t | 否 | Local<JSValueRef>对象数组长度。 |
4204
4205**返回值:**
4206
4207| 类型 | 说明 |
4208| ----------------- | ------------------------ |
4209| Local<JSValueRef> | 用于返回函数执行的结果。 |
4210
4211**示例:**
4212
4213```C++
4214Local<JSValueRef> FunCallback(JsiRuntimeCallInfo *info)
4215{
4216 EscapeLocalScope scope(info->GetVM());
4217 return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
4218}
4219Local<IntegerRef> intValue = IntegerRef::New(vm, 0);
4220std::vector<Local<JSValueRef>> argumentsInt;
4221argumentsInt.emplace_back(intValue);
4222Local<FunctionRef> callback = FunctionRef::New(vm, FunCallback);
4223callback->Call(vm, JSValueRef::Undefined(vm), argumentsInt.data(), argumentsInt.size());
4224```
4225
4226### GetSourceCode
4227
4228Local<StringRef> GetSourceCode(const EcmaVM *vm, int lineNumber);
4229
4230获取调用此函数的CPP文件内,指定行号的源代码。
4231
4232**参数:**
4233
4234| 参数名 | 类型 | 必填 | 说明 |
4235| :--------: | -------------- | ---- | ---------------- |
4236| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
4237| lineNumber | int | 是 | 指定行号。 |
4238
4239**返回值:**
4240
4241| 类型 | 说明 |
4242| ---------------- | --------------------- |
4243| Local<StringRef> | 返回为StringRef对象。 |
4244
4245**示例:**
4246
4247```C++
4248Local<JSValueRef> FunCallback(JsiRuntimeCallInfo *info)
4249{
4250 EscapeLocalScope scope(info->GetVM());
4251 return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
4252}
4253Local<FunctionRef> callback = FunctionRef::New(vm, FunCallback);
4254Local<StringRef> src = callback->GetSourceCode(vm, 10);
4255```
4256
4257### Constructor
4258
4259Local<JSValueRef> FunctionRef::Constructor(const EcmaVM *vm, const Local<JSValueRef> argv[], int32_t length);
4260
4261用于一个函数对象的构造。
4262
4263**参数:**
4264
4265| 参数名 | 类型 | 必填 | 说明 |
4266| :----: | ----------------------- | ---- | -------------------- |
4267| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
4268| argv | const Local<JSValueRef> | 是 | 参数数组。 |
4269| length | int32_t | 是 | argv参数的数组大小。 |
4270
4271**返回值:**
4272
4273| 类型 | 说明 |
4274| ----------------- | ------------------------------------------------------------ |
4275| Local<JSValueRef> | 生成一个FunctionRef,并将其转为Local<JSValueRef>类型,作为函数返回值。 |
4276
4277**示例:**
4278
4279```C++
4280Local<FunctionRef> cls = FunctionRef::NewClassFunction(vm, FunCallback, nullptr, nullptr);
4281Local<JSValueRef> argv[1];
4282int num = 3;
4283argv[0] = NumberRef::New(vm, num);
4284Local<JSValueRef>functionObj = cls->Constructor(vm, argv, 1);
4285```
4286
4287### GetFunctionPrototype
4288
4289Local<JSValueRef> FunctionRef::GetFunctionPrototype(const EcmaVM *vm);
4290
4291获取prototype对象,它包含了所有函数的原型方法,这些方法可以被所有的函数实例共享和重写。
4292
4293**参数:**
4294
4295| 参数名 | 类型 | 必填 | 说明 |
4296| :----: | -------------- | ---- | ---------------- |
4297| vm | const EcmaVM * | 是 | 指定虚拟机对象。 |
4298
4299**返回值:**
4300
4301| 类型 | 说明 |
4302| ----------------- | ------------------------------------------------------------ |
4303| Local<JSValueRef> | 将prototype对象转为Local<JSValueRef>类型,并作为此函数的返回值。 |
4304
4305**示例:**
4306
4307```C++
4308Local<JSValueRef> FunCallback(JsiRuntimeCallInfo *info)
4309{
4310 EscapeLocalScope scope(info->GetVM());
4311 return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
4312}
4313Local<FunctionRef> res = FunctionRef::New(vm, FunCallback);
4314Local<JSValueRef> prototype = res->GetFunctionPrototype(vm);
4315```
4316
4317## TypedArrayRef
4318
4319一种用于处理二进制数据的内置对象。它类似于普通数组,但只能存储和操作特定类型的数据。
4320
4321### ByteLength
4322
4323uint32_t TypedArrayRef::ByteLength([[maybe_unused]] const EcmaVM *vm);
4324
4325此函数返回此ArrayBufferRef缓冲区的长度(以字节为单位)。
4326
4327**参数:**
4328
4329| 参数名 | 类型 | 必填 | 说明 |
4330| :----: | -------------- | ---- | ------------ |
4331| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4332
4333**返回值:**
4334
4335| 类型 | 说明 |
4336| -------- | --------------------------------- |
4337| uint32_t | 以uint32_t 类型返回buffer的长度。 |
4338
4339**示例:**
4340
4341```c++
4342Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm, 10);
4343Local<DataViewRef> dataView = DataViewRef::New(vm, arrayBuffer, 5, 7);
4344uint32_t len = dataView->ByteLength();
4345```
4346
4347### ByteOffset
4348
4349uint32_t TypedArrayRef::ByteOffset([[maybe_unused]] const EcmaVM *vm);
4350
4351获取当前 `TypedArrayRef` 对象在关联的底层数组缓冲区中的字节偏移位置。
4352
4353在获取字节偏移之前,通过 `CHECK_HAS_PENDING_EXCEPTION` 宏检查是否存在潜在的异常。
4354
4355使用 `JSNApiHelper::ToJSHandle(this)` 将当前的 `TypedArrayRef` 对象转换为 JavaScript 中的 `JSTypedArray` 对象。
4356
4357调用 `GetByteOffset` 方法获取实际的 TypedArray 在 ArrayBuffer 中的字节偏移位置。
4358
4359**参数:**
4360
4361| 参数名 | 类型 | 必填 | 说明 |
4362| ------ | -------------- | ---- | ------------ |
4363| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4364
4365**返回值:**
4366
4367| 类型 | 说明 |
4368| ------- | --------------------------------------------------------- |
4369| int32_t | 表示 TypedArray 对象在关联 ArrayBuffer 中的字节偏移位置。 |
4370
4371**示例:**
4372
4373```c++
4374Local<ArrayBufferRef> arrayOffsetBuffer = ArrayBufferRef::New(vm, length);
4375Local<Int8ArrayRef> objOffset = Int8ArrayRef::New(vm, arrayOffsetBuffer, Offset, length);
4376uint32_t byteOffset = obj->ByteOffset(vm);
4377```
4378
4379### ArrayLength
4380
4381uint32_t TypedArrayRef::ArrayLength(const EcmaVM *vm);
4382
4383获取当前 `TypedArrayRef` 对象的数组长度,即其中存储的元素的数量。
4384
4385在获取数组长度之前,通过 `CHECK_HAS_PENDING_EXCEPTION` 宏检查是否存在潜在的异常。
4386
4387使用 `JSNApiHelper::ToJSHandle(this)` 将当前的 `TypedArrayRef` 对象转换为 JavaScript 中的 `JSTypedArray` 对象。
4388
4389调用 `GetArrayLength` 方法获取实际的数组长度。
4390
4391**参数:**
4392
4393| 参数名 | 类型 | 必填 | 说明 |
4394| ------ | -------------- | ---- | ------------ |
4395| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4396
4397**返回值:**
4398
4399| 类型 | 说明 |
4400| ------- | -------------------------------------------- |
4401| int32_t | 表示 TypedArray 对象的数组长度(元素数量)。 |
4402
4403**示例:**
4404
4405```c++
4406Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm, length);
4407Local<Int8ArrayRef> obj = Int8ArrayRef::New(vm, arrayBuffer, 5, 6);
4408uint32_t byteOffset = obj->ArrayLength(vm);
4409```
4410
4411### GetArrayBuffer
4412
4413Local<ArrayBufferRef> TypedArrayRef::GetArrayBuffer(const EcmaVM *vm);
4414
4415获取当前 `TypedArrayRef` 对象关联的 ArrayBufferRef 对象。
4416
4417在获取 ArrayBufferRef 之前,通过 `CHECK_HAS_PENDING_EXCEPTION_RETURN_UNDEFINED` 宏检查是否存在潜在的异常。
4418
4419使用 `JSNApiHelper::ToJSHandle(this)` 将当前的 `TypedArrayRef` 对象转换为 JavaScript 中的 `JSTypedArray` 对象。
4420
4421调用 `JSTypedArray::GetOffHeapBuffer` 方法获取实际的 ArrayBuffer 对象。
4422
4423使用 `JSNApiHelper::ToLocal<ArrayBufferRef>(arrayBuffer)`
4424将 JavaScript 中的 ArrayBuffer 对象转换为本地的 `ArrayBufferRef` 对象。
4425
4426**参数:**
4427
4428| 参数名 | 类型 | 必填 | 说明 |
4429| ------ | -------------- | ---- | ------------ |
4430| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4431
4432**返回值:**
4433
4434| 类型 | 说明 |
4435| --------------------- | ----------------------------- |
4436| Local<ArrayBufferRef> | `ArrayBufferRef` 类型的对象。 |
4437
4438**示例:**
4439
4440```c++
4441Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm, length);
4442Local<Int8ArrayRef> obj = Int8ArrayRef::New(vm, arrayBuffer, 5, 6);
4443Local<ArrayBufferRef> byteOffset = obj->GetArrayBuffer(vm);
4444```
4445
4446
4447
4448## Exception
4449
4450提供了一些静态方法,用于根据不同的错误类型创建一个对应的JS异常对象,并返回一个指向该对象的引用。
4451
4452### AggregateError
4453
4454static Local<JSValueRef> AggregateError(const EcmaVM *vm, Local<StringRef> message);
4455
4456当需要将多个错误包装在一个错误中时,AggregateError对象表示一个错误。
4457
4458**参数:**
4459
4460| 参数名 | 类型 | 必填 | 说明 |
4461| :-----: | ---------------- | ---- | ------------ |
4462| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4463| message | Local<StringRef> | 是 | 错误信息。 |
4464
4465**返回值:**
4466
4467| 类型 | 说明 |
4468| ----------------- | ------------------------------------------------------------ |
4469| Local<JSValueRef> | 将多个错误包装为AggregateError对象,并将其转为Local<JSValueRef>类型,作为函数的返回值。 |
4470
4471**示例:**
4472
4473```C++
4474Local<JSValueRef> error = Exception::AggregateError(vm, StringRef::NewFromUtf8(vm, "test aggregate error"));
4475```
4476
4477### EvalError
4478
4479static Local<JSValueRef> EvalError(const EcmaVM *vm, Local<StringRef> message);
4480
4481用于表示在执行 `eval()` 函数时发生的错误。当 `eval()` 函数无法解析或执行传入的字符串代码时,会抛出一个 `EvalError` 异常。
4482
4483**参数:**
4484
4485| 参数名 | 类型 | 必填 | 说明 |
4486| :-----: | ---------------- | ---- | ------------ |
4487| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4488| message | Local<StringRef> | 是 | 错误信息。 |
4489
4490**返回值:**
4491
4492| 类型 | 说明 |
4493| ----------------- | ---- |
4494| Local<JSValueRef> | |
4495
4496**示例:**
4497
4498```C++
4499Local<JSValueRef> error = Exception::EvalError(vm, StringRef::NewFromUtf8(vm, "test eval error"));
4500```
4501
4502
4503
4504### OOMError
4505
4506static Local<JSValueRef> OOMError(const EcmaVM *vm, Local<StringRef> message);
4507
4508在内存不足的情况下抛出一个错误对象。(由于这是一个静态成员函数,因此可以直接通过类名调用,而无需创建类的实例。)
4509
4510**参数:**
4511
4512| 参数名 | 类型 | 必填 | 说明 |
4513| ------- | ---------------- | ---- | ------------------------------ |
4514| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4515| message | Local<StringRef> | 是 | 传递给OOMError函数的错误消息。 |
4516
4517**返回值:**
4518
4519| 类型 | 说明 |
4520| ----------------- | ---------------------------------------------------------- |
4521| Local<JSValueRef> | 返回一个 JSValueRef 对象,表示JavaScript中的值或错误信息。 |
4522
4523**示例:**
4524
4525```c++
4526Local<JSValueRef> value = Exception::OOMError(vm_, message);
4527```
4528
4529### TypeError
4530
4531static Local<JSValueRef> TypeError(const EcmaVM *vm, Local<StringRef> message);
4532
4533在给定的虚拟机(EcmaVM)中创建一个表示类型错误的 JavaScript 值引用(JSValueRef)。
4534
4535**参数:**
4536
4537| 参数名 | 类型 | 必填 | 说明 |
4538| ------- | ---------------- | ---- | ------------------------------- |
4539| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4540| message | Local<StringRef> | 是 | 传递给TypeError函数的错误消息。 |
4541
4542**返回值:**
4543
4544| 类型 | 说明 |
4545| ----------------- | ------------------------------------------------------------ |
4546| Local<JSValueRef> | 返回一个 JSValueRef 对象,表示JavaScript中的错误信息。可以用于进一步处理或传递该错误对象。 |
4547
4548**示例:**
4549
4550```c++
4551Local<JSValueRef> value = Exception::TypeError(vm_, message);
4552```
4553
4554### Error
4555
4556static Local<JSValueRef> Error(const EcmaVM *vm, Local<StringRef> message);
4557
4558用于检测error并创建一个新的错误对象。
4559
4560**参数:**
4561
4562| 参数名 | 类型 | 必填 | 说明 |
4563| ------- | ---------------- | ---- | -------------- |
4564| vm | const EcmaVM * | 是 | 虚拟机对象 |
4565| message | Local<StringRef> | 是 | 传入的错误消息 |
4566
4567**返回值:**
4568
4569| 类型 | 说明 |
4570| :---------------- | :------------------- |
4571| Local<JSValueRef> | 返回创建的错误对象。 |
4572
4573**示例:**
4574
4575```c++
4576Local<StringRef> message = StringRef::NewFromUtf8(vm_, "test error");
4577Local<JSValueRef> result = Exception::Error(vm_, message);
4578```
4579
4580### RangeError
4581
4582static Local<JSValueRef> RangeError(const EcmaVM *vm, Local<StringRef> message);
4583
4584用于检测范围错误并创建一个新的错误对象。
4585
4586**参数:**
4587
4588| 参数名 | 类型 | 必填 | 说明 |
4589| ------- | ---------------- | ---- | -------------- |
4590| vm | const EcmaVM * | 是 | 虚拟机对象 |
4591| message | Local<StringRef> | 是 | 传入的错误消息 |
4592
4593**返回值:**
4594
4595| 类型 | 说明 |
4596| :---------------- | :------------------- |
4597| Local<JSValueRef> | 返回创建的错误对象。 |
4598
4599**示例:**
4600
4601```c++
4602Local<StringRef> message = StringRef::NewFromUtf8(vm_, "test error");
4603Local<JSValueRef> result = Exception::RangeError(vm_, message);
4604```
4605
4606### ReferenceError
4607
4608static Local<JSValueRef> ReferenceError(const EcmaVM *vm, Local<StringRef> message);
4609
4610用于检测引用错误并创建一个新的错误对象。
4611
4612**参数:**
4613
4614| 参数名 | 类型 | 必填 | 说明 |
4615| ------- | ---------------- | ---- | -------------- |
4616| vm | const EcmaVM * | 是 | 虚拟机对象 |
4617| message | Local<StringRef> | 是 | 传入的错误消息 |
4618
4619**返回值:**
4620
4621| 类型 | 说明 |
4622| :---------------- | :------------------- |
4623| Local<JSValueRef> | 返回创建的错误对象。 |
4624
4625**示例:**
4626
4627```c++
4628Local<StringRef> message = StringRef::NewFromUtf8(vm_, "test error");
4629Local<JSValueRef> result = Exception::ReferenceError(vm_, message);
4630```
4631
4632### SyntaxError
4633
4634static Local<JSValueRef> SyntaxError(const EcmaVM *vm, Local<StringRef> message);
4635
4636创建一个 SyntaxError 类型的 JavaScript 异常对象。
4637
4638如果存在挂起的异常,则清除之。
4639
4640获取 `message` 的 `EcmaString` 对象,用于表示异常错误的消息。
4641
4642用 `ObjectFactory` 获取工厂实例,创建一个新的 JavaScript SyntaxError 对象。
4643
4644返回结果作为本地引用。
4645
4646**参数:**
4647
4648| 参数名 | 类型 | 必填 | 说明 |
4649| ------- | ---------------- | ---- | -------------------- |
4650| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4651| message | Local<StringRef> | 是 | 表示异常错误的消息。 |
4652
4653**返回值:**
4654
4655| 类型 | 说明 |
4656| ------------------------ | --------------------- |
4657| static Local<JSValueRef> | ArrayRef 类型的对象。 |
4658
4659**示例:**
4660
4661```c++
4662Local<StringRef> errorMessage = StringRef::NewFromUtf8(vm, "Invalid syntax");
4663Local<JSValueRef> syntaxError = SyntaxError(vm, errorMessage);
4664```
4665
4666
4667
4668## MapIteratorRef
4669
4670用于表示和操作JS Map对象的迭代器引用的类,它继承自ObjectRef类,并提供了一些操作JS Map迭代器方法。
4671
4672### GetKind
4673
4674Local<JSValueRef> GetKind(const EcmaVM *vm);
4675
4676获取MapIterator迭代元素的类型,分别为key,value,keyAndValue。
4677
4678**参数:**
4679
4680| 参数名 | 类型 | 必填 | 说明 |
4681| :----: | -------------- | ---- | ------------ |
4682| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4683
4684**返回值:**
4685
4686| 类型 | 说明 |
4687| ----------------- | ------------------------------------------------------------ |
4688| Local<JSValueRef> | 获取迭代器的类型并将其转为Local<JSValueRef>,作为函数的返回值。 |
4689
4690**示例:**
4691
4692```c++
4693JSHandle<GlobalEnv> env = vm->GetGlobalEnv();
4694ObjectFactory *factory = vm->GetFactory();
4695JSHandle<JSTaggedValue> builtinsMapFunc = env->GetBuiltinsMapFunction();
4696JSHandle<JSMap> jsMap(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(builtinsMapFunc), builtinsMapFunc));
4697JSHandle<JSTaggedValue> linkedHashMap(LinkedHashMap::Create(vm->GetJSThread()));
4698jsMap->SetLinkedMap(vm->GetJSThread(), linkedHashMap);
4699JSHandle<JSTaggedValue> mapValue(jsMap);
4700JSHandle<JSTaggedValue> mapIteratorVal = JSMapIterator::CreateMapIterator(vm->GetJSThread(), mapValue, IterationKind::KEY);
4701JSHandle<JSMapIterator> mapIterator = JSHandle<JSMapIterator>::Cast(mapIteratorVal);
4702mapIterator->SetIterationKind(IterationKind::VALUE);
4703mapIterator->SetIterationKind(IterationKind::KEY_AND_VALUE);
4704Local<MapIteratorRef> object = JSNApiHelper::ToLocal<MapIteratorRef>(mapIteratorVal);
4705Local<JSValueRef> type = object->GetKind(vm);
4706```
4707
4708### GetIndex
4709
4710int32_t GetIndex();
4711
4712用于获取Map迭代器的索引值,并使用断言验证结果是否为0,即初始索引值。
4713
4714**参数:**
4715
4716无
4717
4718**返回值:**
4719
4720| 类型 | 说明 |
4721| :------ | :---------------------------- |
4722| int32_t | 返回获取的Map迭代器的索引值。 |
4723
4724**示例:**
4725
4726```c++
4727ObjectFactory *factory = vm_->GetFactory();
4728JSHandle<JSTaggedValue> builtinsMapFunc = vm_->GetGlobalEnv()->GetBuiltinsMapFunction();
4729JSHandle<JSMap> jsMap(factory->NewJSObjectByConstructor(JSHandle<JSFunction>(builtinsMapFunc), builtinsMapFunc));
4730JSHandle<JSTaggedValue> linkedHashMap(LinkedHashMap::Create(thread_));
4731jsMap->SetLinkedMap(thread_, linkedHashMap);
4732JSHandle<JSTaggedValue> mapValue(jsMap);
4733JSHandle<JSTaggedValue> mapIteratorVal = JSMapIterator::CreateMapIterator(thread_, mapValue, IterationKind::KEY);
4734JSHandle<JSMapIterator> mapIterator = JSHandle<JSMapIterator>::Cast(mapIteratorVal);
4735mapIterator->SetNextIndex(index);
4736Local<MapIteratorRef> object = JSNApiHelper::ToLocal<MapIteratorRef>(mapIteratorVal);
4737int32_t result = object->GetIndex();
4738```
4739
4740
4741
4742## PrimitiveRef
4743
4744表述为原始对象,包括Undefined,Null,Boolean,Number,String,Symbol,BigInt 这些Primitive类型的值是不可变的,即一旦创建就不能修改。
4745
4746### GetValue
4747
4748Local<JSValueRef> GetValue(const EcmaVM *vm);
4749
4750获取原始对象的值。
4751
4752**参数:**
4753
4754| 参数名 | 类型 | 必填 | 说明 |
4755| :----: | -------------- | ---- | ------------ |
4756| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4757
4758**返回值:**
4759
4760| 类型 | 说明 |
4761| ----------------- | ------------------------------------------------------------ |
4762| Local<JSValueRef> | 获取值将其转换为 Local<JSValueRef>类型对象,并作为函数的返回值。 |
4763
4764**示例:**
4765
4766```C++
4767Local<IntegerRef> intValue = IntegerRef::New(vm, 10);
4768Local<JSValueRef> jsValue = intValue->GetValue(vm);
4769```
4770
4771## IntegerRef
4772
4773用于表示一个整数,它通常用于处理整数运算,IntegerRef可以存储更大的整数,最多可以存储16个整数。
4774
4775### New
4776
4777static Local<IntegerRef> New(const EcmaVM *vm, int input);
4778
4779创建一个新的IntegerRef对象。
4780
4781**参数:**
4782
4783| 参数名 | 类型 | 必填 | 说明 |
4784| :----: | -------------- | ---- | -------------------- |
4785| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4786| input | int | 是 | IntegerRef对象的值。 |
4787
4788**返回值:**
4789
4790| 类型 | 说明 |
4791| ----------------- | ---------------------------- |
4792| Local<IntegerRef> | 返回一个新的IntegerRef对象。 |
4793
4794**示例:**
4795
4796```C++
4797Local<IntegerRef> intValue = IntegerRef::New(vm, 0);
4798```
4799
4800### NewFromUnsigned
4801
4802static Local<IntegerRef> NewFromUnsigned(const EcmaVM *vm, unsigned int input);
4803
4804创建无符号的IntegerRef对象。
4805
4806**参数:**
4807
4808| 参数名 | 类型 | 必填 | 说明 |
4809| :----: | -------------- | ---- | -------------------- |
4810| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4811| input | int | 是 | IntegerRef对象的值。 |
4812
4813**返回值:**
4814
4815| 类型 | 说明 |
4816| ----------------- | ---------------------------- |
4817| Local<IntegerRef> | 返回一个新的IntegerRef对象。 |
4818
4819**示例:**
4820
4821```C++
4822Local<IntegerRef> intValue = IntegerRef::NewFromUnsigned(vm, 0);
4823```
4824
4825### Value
4826
4827int IntegerRef::Value();
4828
4829获取一个IntegerRef对象的整数值。
4830
4831**参数:**
4832
4833无
4834
4835**返回值:**
4836
4837| 类型 | 说明 |
4838| ---- | ----------------------- |
4839| int | 返回一个int类型的数值。 |
4840
4841**示例:**
4842
4843```c++
4844int num = 0;
4845Local<IntegerRef> intValue = IntegerRef::New(vm_, num);
4846int i = intValue->Value();
4847```
4848
4849
4850
4851
4852
4853## PromiseRef
4854
4855用于处理异步操作,它表示一个尚未完成但预计在未来会完成的操作,并且返回一个值。Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。
4856
4857### Catch
4858
4859Local<PromiseRef> Catch(const EcmaVM *vm, Local<FunctionRef> handler);
4860
4861用于捕获异步操作中的错误,当一个Promise被rejected时,可以使用catch方法来处理错误。
4862
4863**参数:**
4864
4865| 参数名 | 类型 | 必填 | 说明 |
4866| :-----: | ------------------ | ---- | ------------------------------------------------------------ |
4867| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4868| handler | Local<FunctionRef> | 是 | 指向FunctionRef类型的局部变量,表示处理异常的回调函数。将在Promise对象中发生异常时被调用。 |
4869
4870**返回值:**
4871
4872| 类型 | 说明 |
4873| ----------------- | ------------------------------------------------------------ |
4874| Local<PromiseRef> | 如果在调用过程中发生中断,则返回未定义(undefined)。否则,将结果转换为PromiseRef类型并返回。 |
4875
4876**示例:**
4877
4878```C++
4879Local<JSValueRef> FunCallback(JsiRuntimeCallInfo *info)
4880{
4881 EscapeLocalScope scope(info->GetVM());
4882 return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
4883}
4884Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm);
4885Local<PromiseRef> promise = capability->GetPromise(vm);
4886Local<FunctionRef> reject = FunctionRef::New(vm, FunCallback);
4887Local<PromiseRef> result = promise->Catch(vm, reject);
4888```
4889
4890### Then
4891
4892Local<PromiseRef> Then(const EcmaVM *vm, Local<FunctionRef> handler);
4893
4894对Promise设置一个回调函数,Promise对象敲定时执行的函数。
4895
4896Local<PromiseRef> Then(const EcmaVM *vm, Local<FunctionRef> onFulfilled, Local<FunctionRef> onRejected);
4897
4898对Promise设置一个回调函数,Promise对象敲定执行onFulfilled,Promise对象拒绝执行onRejected。
4899
4900**参数:**
4901
4902| 参数名 | 类型 | 必填 | 说明 |
4903| :---------: | ------------------ | ---- | --------------------------- |
4904| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4905| onFulfilled | Local<FunctionRef> | 是 | Promise对象敲定执行的函数。 |
4906| onRejected | Local<FunctionRef> | 是 | Promise对象拒绝执行的函数。 |
4907
4908**返回值:**
4909
4910| 类型 | 说明 |
4911| ----------------- | ------------------------------------------------------------ |
4912| Local<PromiseRef> | 将其结果为 Local<JSValueRef>类型对象,并作为函数的返回值,用于判断异步函数是否设置成功。 |
4913
4914**示例:**
4915
4916```C++
4917Local<JSValueRef> FunCallback(JsiRuntimeCallInfo *info)
4918{
4919 EscapeLocalScope scope(info->GetVM());
4920 return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
4921}
4922Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm);
4923Local<PromiseRef> promise = capability->GetPromise(vm);
4924Local<FunctionRef> callback = FunctionRef::New(vm, FunCallback);
4925Local<PromiseRef> result = promise->Then(vm, callback, callback);
4926```
4927
4928### Finally
4929
4930Local<PromiseRef> Finally(const EcmaVM *vm, Local<FunctionRef> handler);
4931
4932无论Promise对象敲定还是拒绝都会执行的函数。
4933
4934**参数:**
4935
4936| 参数名 | 类型 | 必填 | 说明 |
4937| :-----: | ------------------ | ---- | ---------------- |
4938| vm | const EcmaVM * | 是 | 虚拟机对象。 |
4939| handler | Local<FunctionRef> | 是 | 需要执行的函数。 |
4940
4941**返回值:**
4942
4943| 类型 | 说明 |
4944| ----------------- | ------------------------------------------------------------ |
4945| Local<PromiseRef> | 将其结果为 Local<JSValueRef>类型对象,并作为函数的返回值,用于判断异步函数是否设置成功。 |
4946
4947**示例:**
4948
4949```C++
4950Local<JSValueRef> FunCallback(JsiRuntimeCallInfo *info)
4951{
4952 EscapeLocalScope scope(info->GetVM());
4953 return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
4954}
4955Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm);
4956Local<PromiseRef> promise = capability->GetPromise(vm);
4957Local<FunctionRef> callback = FunctionRef::New(vm, FunCallback);
4958Local<PromiseRef> result = promise->Finally(vm, callback);
4959```
4960
4961## TryCatch
4962
4963异常处理类,用于在JS中捕获和处理一些异常。
4964
4965### GetAndClearException
4966
4967Local<ObjectRef> GetAndClearException();
4968
4969获取和清除捕获到的异常对象。
4970
4971**参数:**
4972
4973| 参数名 | 类型 | 必填 | 说明 |
4974| ------ | ---- | ---- | ---- |
4975| 无参 | | | |
4976
4977**返回值:**
4978
4979| 类型 | 说明 |
4980| ---------------- | ------------------------------------------------------------ |
4981| Local<ObjectRef> | 获取捕获到的异常,并将其转换为 Local<ObjectRef>类型对象,并将作为函数的返回值。 |
4982
4983**示例:**
4984
4985```C++
4986Local<StringRef> message = StringRef::NewFromUtf8(vm, "ErrorTest");
4987JSNApi::ThrowException(vm, Exception::Error(vm, message););
4988TryCatch tryCatch(vm);
4989Local<ObjectRef> error = tryCatch.GetAndClearException();
4990```
4991
4992### TryCatch
4993
4994explicit TryCatch(const EcmaVM *ecmaVm) : ecmaVm_(ecmaVm) {};
4995
4996用于构造TryCatch类的对象。
4997
4998**参数:**
4999
5000| 参数名 | 类型 | 必填 | 说明 |
5001| ------ | -------------- | ---- | ---------- |
5002| ecmaVm | const EcmaVM * | 是 | 虚拟机对象 |
5003
5004**返回值:**
5005
5006无
5007
5008**示例:**
5009
5010```c++
5011TryCatch(vm_);
5012```
5013
5014### HasCaught
5015
5016bool HasCaught() const;
5017
5018用于检查是否有异常对象被捕获。
5019
5020**参数:**
5021
5022无
5023
5024**返回值:**
5025
5026| 类型 | 说明 |
5027| :------ | :------------------------------------------------ |
5028| boolean | 如果有异常对象被捕获,则返回true,否则返回false。 |
5029
5030**示例:**
5031
5032```c++
5033Local<StringRef> message = StringRef::NewFromUtf8(vm_, "ErrorTest");
5034Local<JSValueRef> error = Exception::Error(vm_, message);
5035JSNApi::ThrowException(vm_, error);
5036TryCatch tryCatch(vm_);
5037bool result = tryCatch.HasCaught();
5038```
5039
5040### Rethrow
5041
5042void Rethrow();
5043
5044如果有异常被捕获并处理,通过检查rethrow_的值来确定是否需要重新抛出异常。
5045
5046**参数:**
5047
5048无
5049
5050**返回值:**
5051
5052无。
5053
5054**示例:**
5055
5056```c++
5057TryCatch tryCatch(vm_);
5058tryCatch.Rethrow();
5059```
5060
5061
5062
5063## Uint32ArrayRef
5064
5065用于表示一个无符号32位整数数组的引用,继承自TypedArrayRef,并提供了创建一个新的Uint32Array对象的方法。
5066
5067### New
5068
5069static Local<Uint32ArrayRef> New(const EcmaVM *vm, Local<ArrayBufferRef> buffer, int32_t byteOffset, int32_t length);
5070
5071用于构造一个使用ArrayBuffer对象指定偏移量和长度转换的Uint32Array对象。
5072
5073**参数:**
5074
5075| 参数名 | 类型 | 必填 | 说明 |
5076| ---------- | --------------------- | ---- | ------------------------------------ |
5077| vm | const EcmaVM * | 是 | 虚拟机对象 |
5078| buffer | Local<ArrayBufferRef> | 是 | 要转换为Uint32Array的ArrayBuffer对象 |
5079| byteOffset | int32_t | 是 | ArrayBuffer对象的指定位置偏移量 |
5080| length | int32_t | 是 | ArrayBuffer对象的指定长度 |
5081
5082**返回值:**
5083
5084| 类型 | 说明 |
5085| :-------------------- | :-------------------------- |
5086| Local<Uint32ArrayRef> | 返回构造的Uint32Array对象。 |
5087
5088**示例:**
5089
5090```c++
5091Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, bufferLength);
5092Local<Uint32ArrayRef> result = Uint32ArrayRef::New(vm_,arrayBuffer,bufferOffset,offsetLength);
5093```
5094
5095
5096
5097## Uint8ArrayRef
5098
5099用于表示一个无符号8位整数数组的引用,继承自TypedArrayRef,并提供了创建一个新的Uint8Array对象的方法。
5100
5101### New
5102
5103static Local<Uint8ArrayRef> New(const EcmaVM *vm, Local<ArrayBufferRef> buffer, int32_t byteOffset, int32_t length);
5104
5105用于构造一个使用ArrayBuffer对象指定偏移量和长度转换的Uint8Array对象。
5106
5107**参数:**
5108
5109| 参数名 | 类型 | 必填 | 说明 |
5110| ---------- | --------------------- | ---- | ----------------------------------- |
5111| vm | const EcmaVM * | 是 | 虚拟机对象 |
5112| buffer | Local<ArrayBufferRef> | 是 | 要转换为Uint8Array的ArrayBuffer对象 |
5113| byteOffset | int32_t | 是 | ArrayBuffer对象的指定位置偏移量 |
5114| length | int32_t | 是 | ArrayBuffer对象的指定长度 |
5115
5116**返回值:**
5117
5118| 类型 | 说明 |
5119| :-------------------- | :-------------------------- |
5120| Local<Uint32ArrayRef> | 返回构造的Uint32Array对象。 |
5121
5122**示例:**
5123
5124```c++
5125Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, 30);
5126Local<Uint8ArrayRef> result = Uint8ArrayRef::New(vm_,arrayBuffer,10,10);
5127```
5128
5129
5130
5131## MapRef
5132
5133用于表示和操作JS Map对象的引用,它继承自ObjectRef类,并提供了一些操作JSMap对象的方法。
5134
5135### New
5136
5137static Local<MapRef> New(const EcmaVM *vm);
5138
5139用于创建一个Map对象。
5140
5141**参数:**
5142
5143| 参数名 | 类型 | 必填 | 说明 |
5144| ------ | -------------- | ---- | ---------- |
5145| vm | const EcmaVM * | 是 | 虚拟机对象 |
5146
5147**返回值:**
5148
5149| 类型 | 说明 |
5150| :------------ | :------------------ |
5151| Local<MapRef> | 返回创建的Map对象。 |
5152
5153**示例:**
5154
5155```c++
5156Local<MapRef> result = MapRef::New(vm_);
5157```
5158
5159### GetSize
5160
5161int32_t GetSize();
5162
5163 返回 `MapRef` 对象中键值对的数量,即 `Map` 对象的大小。
5164
5165通过 `JSNApiHelper::ToJSHandle(this)` 将当前的 `MapRef` 对象转换为 JavaScript 中的 `JSMap` 对象。
5166
5167调用 `JSMap::GetSize` 方法获取 `Map` 对象的大小。
5168
5169**参数:**
5170
5171无
5172
5173**返回值:**
5174
5175| 类型 | 说明 |
5176| ------- | ---------------------- |
5177| int32_t | 返回`Map` 对象的大小。 |
5178
5179**示例:**
5180
5181```c++
5182Local<MapRef> mapRef = MapRef::New(vm_);
5183int32_t size = mapRef->GetSize();
5184```
5185
5186### GetTotalElements
5187
5188int32_t GetTotalElements();
5189
5190返回 `MapRef` 对象中所有元素的数量,包括实际存在的元素和已删除的元素。
5191
5192通过 `JSNApiHelper::ToJSHandle(this)` 将当前的 `MapRef` 对象转换为 JavaScript 中的 `JSMap` 对象。
5193
5194调用 `JSMap::GetSize` 方法获取 `Map` 对象的大小,加上已删除元素的数量。
5195
5196**参数:**
5197
5198无
5199
5200**返回值:**
5201
5202| 类型 | 说明 |
5203| ------- | ---------------------- |
5204| int32_t | 对象中所有元素的数量。 |
5205
5206**示例:**
5207
5208```c++
5209Local<MapRef> mapRef = MapRef::New(vm_);
5210int32_t totalElements = mapRef->GetTotalElements();
5211```
5212
5213### Get
5214
5215Local<JSValueRef> Get(const EcmaVM *vm, Local<JSValueRef> key);
5216
5217返回 `MapRef` 对象中指定键的值。
5218
5219在获取之前,通过 `CHECK_HAS_PENDING_EXCEPTION_RETURN_UNDEFINED` 宏检查是否存在潜在的异常。
5220
5221使用 `JSNApiHelper::ToJSHandle(this)` 将当前的 `MapRef` 对象转换为 JavaScript 中的 `JSMap` 对象。
5222
5223调用 `map->Get` 方法获取与给定键对应的值。
5224
5225**参数:**
5226
5227| 参数名 | 类型 | 必填 | 说明 |
5228| ------ | ----------------- | ---- | ---------------- |
5229| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5230| key | Local<JSValueRef> | 是 | 表示要获取的键。 |
5231
5232**返回值:**
5233
5234| 类型 | 说明 |
5235| ----------------- | ---------------------------- |
5236| Local<JSValueRef> | 返回表示迭代类型的字符串值。 |
5237
5238**示例:**
5239
5240```c++
5241Local<MapRef> mapRef = MapRef::New(vm_);
5242Local<JSValueRef> myValue = MapRef->Get(myEcmaVM, myKey);
5243```
5244
5245### GetKey
5246
5247Local<JSValueRef> GetKey(const EcmaVM *vm, int entry);
5248
5249获取 Map 对象中指定索引处的键。
5250
5251在获取之前,通过 `CHECK_HAS_PENDING_EXCEPTION_RETURN_UNDEFINED` 宏检查是否存在潜在的异常。
5252
5253使用 `JSNApiHelper::ToJSHandle(this)` 将当前的 `MapRef` 对象转换为 JavaScript 中的 `JSMap` 对象。
5254
5255 调用 `map->GetKey(entry)` 方法获取 Map 对象中指定索引处的键,并将结果转换为 `Local<JSValueRef>`。
5256
5257**参数:**
5258
5259| 参数名 | 类型 | 必填 | 说明 |
5260| ------ | -------------- | ---- | --------------------------------------------- |
5261| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5262| entry | int | 是 | 表示 Map 对象中的条目索引,用于获取相应的键。 |
5263
5264**返回值:**
5265
5266| 类型 | 说明 |
5267| ----------------- | --------------------------------- |
5268| Local<JSValueRef> | 返回了 Map 对象中指定索引处的键。 |
5269
5270**示例:**
5271
5272```c++
5273Local<MapRef> mapRef = MapRef::New(vm_);
5274Local<JSValueRef> myKey = MapRef->GetKey(myEcmaVM, myEntry);
5275```
5276
5277### GetValue
5278
5279Local<JSValueRef> GetValue(const EcmaVM *vm, int entry);
5280
5281获取 Map 对象中指定索引处的值。
5282
5283在获取之前,通过 `CHECK_HAS_PENDING_EXCEPTION_RETURN_UNDEFINED` 宏检查是否存在潜在的异常。
5284
5285使用 `JSNApiHelper::ToJSHandle(this)` 将当前的 `MapRef` 对象转换为 JavaScript 中的 `JSMap` 对象。
5286
5287调用 `map->GetValue(entry)` 方法获取 Map 对象中指定索引处的值,并将结果转换为 `Local<JSValueRef>`。
5288
5289**参数:**
5290
5291| 参数名 | 类型 | 必填 | 说明 |
5292| ------ | -------------- | ---- | ------------------ |
5293| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5294| entry | int | 是 | 用于获取相应的值。 |
5295
5296**返回值:**
5297
5298| 类型 | 说明 |
5299| ----------------- | --------------------------------- |
5300| Local<JSValueRef> | 返回了 Map 对象中指定索引处的值。 |
5301
5302**示例:**
5303
5304```c++
5305Local<MapRef> mapRef = MapRef::New(vm_);
5306Local<JSValueRef> myValue = MapRef->Get(myEcmaVM, myEntry);
5307```
5308
5309### Set
5310
5311void Set(const EcmaVM *vm, Local<JSValueRef> key, Local<JSValueRef> value);
5312
5313 向当前 `MapRef` 对象中设置键值对。
5314
5315在设置之前,通过 `CHECK_HAS_PENDING_EXCEPTION_WITHOUT_RETURN` 宏检查是否存在潜在的异常。
5316
5317使用 `JSNApiHelper::ToJSHandle(this)` 将当前的 `MapRef` 对象转换为 JavaScript 中的 `JSMap` 对象。
5318
5319调用 `JSMap::Set` 方法在 Map 对象中设置键值对。
5320
5321**参数:**
5322
5323| 参数名 | 类型 | 必填 | 说明 |
5324| ------ | ----------------- | ---- | ---------------- |
5325| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5326| key | Local<JSValueRef> | 是 | 表示要设置的键。 |
5327| value | Local<JSValueRef> | 是 | 表示要设置的值。 |
5328
5329**返回值:**
5330
5331无
5332
5333**示例:**
5334
5335```c++
5336myMap.Set(myEcmaVM, myKey, myValue);
5337```
5338
5339
5340
5341## WeakMapRef
5342
5343用于表示和操作JS WeakMap对象的类,它继承自ObjectRef类,并提供了一些操作JS WeakMap对象的方法。
5344
5345### GetSize
5346
5347int32_t GetSize();
5348
5349用于获取WeakMap的大小。
5350
5351**参数:**
5352
5353无
5354
5355**返回值:**
5356
5357| 类型 | 说明 |
5358| :------ | :-------------------------- |
5359| int32_t | 返回获取到的WeakMap的大小。 |
5360
5361**示例:**
5362
5363```c++
5364Local<WeakMapRef> object = WeakMapRef::New(vm_);
5365Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5366Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
5367object->Set(vm_, key, value);
5368int32_t result = object->GetSize();
5369```
5370
5371### GetTotalElements
5372
5373int32_t GetTotalElements();
5374
5375用于获取WeakMap的元素个数。
5376
5377**参数:**
5378
5379无
5380
5381**返回值:**
5382
5383| 类型 | 说明 |
5384| :------ | :------------------------------ |
5385| int32_t | 返回获取到的WeakMap的元素个数。 |
5386
5387**示例:**
5388
5389```c++
5390Local<WeakMapRef> object = WeakMapRef::New(vm_);
5391Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5392Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
5393object->Set(vm_, key, value);
5394int32_t result = object->GetTotalElements();
5395```
5396
5397### GetKey
5398
5399Local<JSValueRef> GetKey(const EcmaVM *vm, int entry);
5400
5401通过指定的入口位置获取WeakMap中指定的键。
5402
5403**参数:**
5404
5405| 参数名 | 类型 | 必填 | 说明 |
5406| ------ | -------------- | ---- | -------------------- |
5407| vm | const EcmaVM * | 是 | 虚拟机对象 |
5408| entry | int | 是 | 要获取的键的入口位置 |
5409
5410**返回值:**
5411
5412| 类型 | 说明 |
5413| :---------------- | :--------------------- |
5414| Local<JSValueRef> | 返回获取到的指定的键。 |
5415
5416**示例:**
5417
5418```c++
5419Local<WeakMapRef> object = WeakMapRef::New(vm_);
5420Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5421Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
5422object->Set(vm_, key, value);
5423Local<JSValueRef> result = object->GetKey(vm_, entry);
5424```
5425
5426### GetValue
5427
5428Local<JSValueRef> GetValue(const EcmaVM *vm, int entry);
5429
5430通过指定的入口位置获取WeakMap中指定的Value值。
5431
5432**参数:**
5433
5434| 参数名 | 类型 | 必填 | 说明 |
5435| ------ | -------------- | ---- | ------------------------- |
5436| vm | const EcmaVM * | 是 | 虚拟机对象 |
5437| entry | int | 是 | 要获取的Value值的入口位置 |
5438
5439**返回值:**
5440
5441| 类型 | 说明 |
5442| :---------------- | :-------------------------- |
5443| Local<JSValueRef> | 返回获取到的指定的Value值。 |
5444
5445**示例:**
5446
5447```c++
5448Local<WeakMapRef> object = WeakMapRef::New(vm_);
5449Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5450Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
5451object->Set(vm_, key, value);
5452Local<JSValueRef> result = object->GetValue(vm_, entry);
5453```
5454
5455
5456
5457## WeakSetRef
5458
5459用于表示和操作JS WeakSet对象的类,它继承自ObjectRef类,并提供了一些操作JS WeakSet对象的方法。
5460
5461### GetSize
5462
5463int32_t GetSize();
5464
5465用于获取WeakSet的大小。
5466
5467**参数:**
5468
5469无
5470
5471**返回值:**
5472
5473| 类型 | 说明 |
5474| :------ | :-------------------------- |
5475| int32_t | 返回获取到的WeakSet的大小。 |
5476
5477**示例:**
5478
5479```c++
5480Local<WeakSetRef> object = WeakSetRef::New(vm_);
5481Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5482Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
5483object->Set(vm_, key, value);
5484int32_t result = object->GetSize();
5485```
5486
5487### GetTotalElements
5488
5489int32_t GetTotalElements();
5490
5491用于获取WeakSet的元素个数。
5492
5493**参数:**
5494
5495无
5496
5497**返回值:**
5498
5499| 类型 | 说明 |
5500| :------ | :------------------------------ |
5501| int32_t | 返回获取到的WeakSet的元素个数。 |
5502
5503**示例:**
5504
5505```c++
5506Local<WeakSetRef> object = WeakSetRef::New(vm_);
5507Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5508Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
5509object->Set(vm_, key, value);
5510int32_t result = object->GetTotalElements();
5511```
5512
5513### GetValue
5514
5515Local<JSValueRef> GetValue(const EcmaVM *vm, int entry);
5516
5517通过指定的入口位置获取WeakSet中指定的Value值。
5518
5519**参数:**
5520
5521| 参数名 | 类型 | 必填 | 说明 |
5522| ------ | -------------- | ---- | ------------------------- |
5523| vm | const EcmaVM * | 是 | 虚拟机对象 |
5524| entry | int | 是 | 要获取的Value值的入口位置 |
5525
5526**返回值:**
5527
5528| 类型 | 说明 |
5529| :---------------- | :-------------------------- |
5530| Local<JSValueRef> | 返回获取到的指定的Value值。 |
5531
5532**示例:**
5533
5534```c++
5535Local<WeakSetRef> object = WeakSetRef::New(vm_);
5536Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
5537Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
5538object->Set(vm_, key, value);
5539Local<JSValueRef> result = object->GetValue(vm_, 0);
5540```
5541
5542
5543
5544## JSExecutionScope
5545
5546用于表示JS执行作用域的类,管理JS代码在特定执行环境中的上下文。
5547
5548### JSExecutionScope
5549
5550explicit JSExecutionScope(const EcmaVM *vm);
5551
5552用于构造一个 JSExecutionScope类型的对象。
5553
5554**参数:**
5555
5556| 参数名 | 类型 | 必填 | 说明 |
5557| ------ | -------------- | ---- | ---------- |
5558| vm | const EcmaVM * | 是 | 虚拟机对象 |
5559
5560**返回值:**
5561
5562无
5563
5564**示例:**
5565
5566```c++
5567JSExecutionScope(vm_);
5568```
5569
5570
5571
5572## NativePointerRef
5573
5574继承于JSValueRef,提供了构造原生指针的方法。
5575
5576### New
5577
5578static Local<NativePointerRef> New(const EcmaVM *vm, void *nativePointer, size_t nativeBindingsize = 0);
5579
5580static Local<NativePointerRef> New(const EcmaVM *vm, void *nativePointer, NativePointerCallback callBack, void *data, size_t nativeBindingsize = 0);
5581
5582用于构造一个原生指针类型的对象。
5583
5584**参数:**
5585
5586| 参数名 | 类型 | 必填 | 说明 |
5587| ----------------- | --------------------- | ---- | -------------------------------- |
5588| vm | const EcmaVM * | 是 | 虚拟机对象 |
5589| nativePointer | void * | 是 | 原生指针 |
5590| nativeBindingsize | size_t | 否 | 原生绑定的大小 |
5591| callBack | NativePointerCallback | 是 | 原生指针的回调函数 |
5592| data | void * | 是 | 任意数据指针,作为回调函数的参数 |
5593
5594**返回值:**
5595
5596| 类型 | 说明 |
5597| :---------------------- | :----------------------------------------- |
5598| Local<NativePointerRef> | 返回构造成功的NativePointerRef类型的对象。 |
5599
5600**示例:**
5601
5602```c++
5603void *vps = static_cast<void *>(new std::string("test"));
5604Local<NativePointerRef> result = NativePointerRef::New(vm_, vps, 0);
5605NativePointerCallback callBack = nullptr;
5606void *vps = static_cast<void *>(new std::string("test"));
5607void *vpsdata = static_cast<void *>(new std::string("test"));
5608Local<NativePointerRef> result = NativePointerRef::New(vm_, vps, callBack, vpsdata, 0);
5609```
5610
5611### Value
5612
5613void *Value();
5614
5615获取一个外部指针,并将它指向一个本地指针并返回。
5616
5617**参数:**
5618
5619无
5620
5621**返回值:**
5622
5623| 类型 | 说明 |
5624| :----- | :--------------------------- |
5625| void * | 返回值为获取原生对象的指针。 |
5626
5627**示例:**
5628
5629```c++
5630void *vps = static_cast<void *>(new std::string("test"));
5631void *vps1 = static_cast<void *>(new std::string("test"));
5632Local<NativePointerRef> res_vps = NativePointerRef::New(vm_, vps, NativeAreaAllocator::FreeBufferFunc, vps1, 0);
5633void *result = res_vps->Value();
5634```
5635
5636
5637
5638## BigInt64ArrayRef
5639
5640用于表示一个64位整数数组,它通常用于处理大整数运算,因为普通的Number类型在JavaScript中只能精确表示到53位整数
5641
5642### New
5643
5644static Local<BigInt64ArrayRef> New(const EcmaVM *vm, Local<ArrayBufferRef> buffer, int32_t byteOffset, int32_t length);
5645
5646创建一个BigInt64ArrayRef对象。
5647
5648**参数:**
5649
5650| 参数名 | 类型 | 必填 | 说明 |
5651| ---------- | --------------------- | ---- | ------------------------------------- |
5652| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5653| buffer | Local<ArrayBufferRef> | 是 | 一个 ArrayBuffer 对象,用于存储数据。 |
5654| byteOffset | int32_t | 是 | 表示从缓冲区的哪个字节开始读取数据。 |
5655| length | int32_t | 是 | 表示要读取的元素数量。 |
5656
5657**返回值:**
5658
5659| 类型 | 说明 |
5660| ----------------------- | ------------------------------ |
5661| Local<BigInt64ArrayRef> | 一个新的BigInt64ArrayRef对象。 |
5662
5663**示例:**
5664
5665```C++
5666Local<ArrayBufferRef> buffer = ArrayBufferRef::New(vm, 5);
5667Local<ObjectRef> object = BigInt64ArrayRef::New(vm, buffer, 0, 5);
5668```
5669
5670## BigIntRef
5671
5672用于表示任意大的整数。它提供了一种方法来处理超过Number类型能表示的整数范围的数字。
5673
5674### New
5675
5676static Local<BigIntRef> New(const EcmaVM *vm, int64_t input);
5677
5678创建一个新的BigIntRef对象。
5679
5680**参数:**
5681
5682| 参数名 | 类型 | 必填 | 说明 |
5683| ------ | -------------- | ---- | ----------------------------- |
5684| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5685| input | int64_t | 是 | 需要转为BigIntRef对象的数值。 |
5686
5687**返回值:**
5688
5689| 类型 | 说明 |
5690| ---------------- | ----------------------- |
5691| Local<BigIntRef> | 一个新的BigIntRef对象。 |
5692
5693**示例:**
5694
5695```C++
5696int64_t maxInt64 = std::numeric_limits<int64_t>::max();
5697Local<BigIntRef> valie = BigIntRef::New(vm, maxInt64);
5698```
5699
5700### BigIntToInt64
5701
5702void BigIntRef::BigIntToInt64(const EcmaVM *vm, int64_t *cValue, bool *lossless);
5703
5704将BigInt对象转换为64位有符号整数,是否能够正确处理无损转换。
5705
5706**参数:**
5707
5708| 参数名 | 类型 | 必填 | 说明 |
5709| -------- | -------------- | ---- | --------------------------------------- |
5710| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5711| cValue | int64_t * | 是 | 用于存储转换为Int64数值的变量。 |
5712| lossless | bool * | 是 | 用于判断超大数是否能够转换为Int64类型。 |
5713
5714**返回值:**
5715
5716| 类型 | 说明 |
5717| ---- | ---------- |
5718| void | 无返回值。 |
5719
5720**示例:**
5721
5722```C++
5723uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
5724Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm, maxUint64);
5725int64_t toNum;
5726bool lossless = true;
5727maxBigintUint64->BigIntToInt64(vm, &toNum, &lossless);
5728```
5729
5730### BigIntToUint64
5731
5732void BigIntRef::BigIntToUint64(const EcmaVM *vm, uint64_t *cValue, bool *lossless);
5733
5734将BigInt对象转换为64位无符号整数,无损转换是否可以正确处理。
5735
5736**参数:**
5737
5738| 参数名 | 类型 | 必填 | 说明 |
5739| -------- | -------------- | ---- | --------------------------------------- |
5740| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5741| cValue | uint64_t * | 是 | 用于存储转换为uint64_t数值的变量。 |
5742| lossless | bool * | 是 | 用于判断超大数是否能够转换为Int64类型。 |
5743
5744**返回值:**
5745
5746| 类型 | 说明 |
5747| ---- | ---------- |
5748| void | 无返回值。 |
5749
5750**示例:**
5751
5752```C++
5753uint64_t maxUint64 = std::numeric_limits<uint64_t>::max();
5754Local<BigIntRef> maxBigintUint64 = BigIntRef::New(vm, maxUint64);
5755int64_t toNum;
5756bool lossless = true;
5757maxBigintUint64->BigIntToInt64(vm, &toNum, &lossless);
5758```
5759
5760### CreateBigWords
5761
5762Local<JSValueRef> BigIntRef::CreateBigWords(const EcmaVM *vm, bool sign, uint32_t size, const uint64_t* words);
5763
5764将一个uint64_t数组包装为一个BigIntRef对象。
5765
5766**参数:**
5767
5768| 参数名 | 类型 | 必填 | 说明 |
5769| ------ | --------------- | ---- | ------------------------------------ |
5770| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5771| sign | bool | 是 | 确定生成的 `BigInt` 是正数还是负数。 |
5772| size | uint32_t | 是 | uint32_t 数组大小。 |
5773| words | const uint64_t* | 是 | uint32_t 数组。 |
5774
5775**返回值:**
5776
5777| 类型 | 说明 |
5778| ----------------- | ------------------------------------------------------------ |
5779| Local<JSValueRef> | 将uint32_t 转换为BigIntRef对象,并将其转换为Local<JSValueRef>类型,作为函数的返回值。 |
5780
5781**示例:**
5782
5783```C++
5784bool sign = false;
5785uint32_t size = 3;
5786const uint64_t words[3] = {
5787 std::numeric_limits<uint64_t>::min() - 1,
5788 std::numeric_limits<uint64_t>::min(),
5789 std::numeric_limits<uint64_t>::max(),
5790};
5791Local<JSValueRef> bigWords = BigIntRef::CreateBigWords(vm, sign, size, words);
5792```
5793
5794### GetWordsArraySize
5795
5796uint32_t GetWordsArraySize();
5797
5798获取BigIntRef对象包装uint64_t数组的大小。
5799
5800**参数:**
5801
5802| 参数名 | 类型 | 必填 | 说明 |
5803| ------ | ---- | ---- | ---- |
5804| 无参 | | | |
5805
5806**返回值:**
5807
5808| 类型 | 说明 |
5809| -------- | ----------------------------------------- |
5810| uint32_t | 返回BigIntRef对象包装uint64_t数组的大小。 |
5811
5812**示例:**
5813
5814```C++
5815bool sign = false;
5816uint32_t size = 3;
5817const uint64_t words[3] = {
5818 std::numeric_limits<uint64_t>::min() - 1,
5819 std::numeric_limits<uint64_t>::min(),
5820 std::numeric_limits<uint64_t>::max(),
5821};
5822Local<JSValueRef> bigWords = BigIntRef::CreateBigWords(vm, sign, size, words);
5823Local<BigIntRef> bigWordsRef(bigWords);
5824uint32_t cnt = bigWordsRef->GetWordsArraySize();
5825```
5826
5827### GetWordsArray
5828
5829void BigIntRef::GetWordsArray(bool *signBit, size_t wordCount, uint64_t *words);
5830
5831获取一个BigIntRef对象的值,并将其表示为一个64位无符号整数数组。同时,它还会设置一个布尔值signBit,表示该BigIntRef对象的符号(正数或负数)。
5832
5833**参数:**
5834
5835| 参数名 | 类型 | 必填 | 说明 |
5836| --------- | ---------- | ---- | ------------------------------------------------------------ |
5837| signBit | bool * | 是 | 指向布尔值的指针,用于存储BigIntRef对象的符号(正数或负数)。 |
5838| wordCount | size_t | 是 | 无符号整数,表示要获取的64位无符号整数数组的长度。 |
5839| words | uint64_t * | 是 | 指向64位无符号整数的指针,用于存储BigIntRef对象的值。 |
5840
5841**返回值:**
5842
5843无
5844
5845**示例:**
5846
5847```c++
5848bool sign = false;
5849uint32_t size = 3;
5850const uint64_t words[3] = {
5851 std::numeric_limits<uint64_t>::min() - 1,
5852 std::numeric_limits<uint64_t>::min(),
5853 std::numeric_limits<uint64_t>::max(),
5854};
5855Local<JSValueRef> bigWords = BigIntRef::CreateBigWords(vm_, sign, size, words);
5856Local<BigIntRef> bigWordsRef(bigWords);
5857bool resultSignBit = true;
5858uint64_t *resultWords = new uint64_t[3]();
5859bigWordsRef->GetWordsArray(&resultSignBit, size, resultWords);
5860```
5861
5862
5863
5864## StringRef
5865
5866继承于PrimitiveRef,用于表示字符串类型数据的引用,提供了一些对字符串的操作方法。
5867
5868### NewFromUtf8
5869
5870Local<StringRef> StringRef::NewFromUtf8(const EcmaVM *vm, const char *utf8, int length)。
5871
5872创建utf8类型的StringRef对象。
5873
5874**参数:**
5875
5876| 参数名 | 类型 | 必填 | 说明 |
5877| ------ | -------------- | ---- | ---------------- |
5878| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5879| utf8 | char * | 是 | char类型字符串。 |
5880| int | length | 是 | 字符串长度。 |
5881
5882**返回值:**
5883
5884| 类型 | 说明 |
5885| ---------------- | ----------------------- |
5886| Local<StringRef> | 一个新的StringRef对象。 |
5887
5888**示例:**
5889
5890```C++
5891std::string testUtf8 = "Hello world";
5892Local<StringRef> description = StringRef::NewFromUtf8(vm, testUtf8.c_str());
5893```
5894
5895### NewFromUtf16
5896
5897Local<StringRef> StringRef::NewFromUtf16(const EcmaVM *vm, const char16_t *utf16, int length);
5898
5899创建utf16类型的StringRef对象。
5900
5901**参数:**
5902
5903| 参数名 | 类型 | 必填 | 说明 |
5904| ------ | -------------- | ---- | --------------------- |
5905| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5906| utf16 | char16_t * | 是 | char16_t 类型字符串。 |
5907| int | length | 是 | 字符串长度。 |
5908
5909**返回值:**
5910
5911| 类型 | 说明 |
5912| ---------------- | ----------------------- |
5913| Local<StringRef> | 一个新的StringRef对象。 |
5914
5915**示例:**
5916
5917```C++
5918char16_t data = 0Xdf06;
5919Local<StringRef> obj = StringRef::NewFromUtf16(vm, &data);
5920```
5921
5922### Utf8Length
5923
5924int32_t StringRef::Utf8Length(const EcmaVM *vm);
5925
5926按utf8类型读取StringRef的值长度。
5927
5928**参数:**
5929
5930| 参数名 | 类型 | 必填 | 说明 |
5931| ------ | -------------- | ---- | ------------ |
5932| vm | const EcmaVM * | 是 | 虚拟机对象。 |
5933
5934**返回值:**
5935
5936| 类型 | 说明 |
5937| ------- | ---------------------- |
5938| int32_t | utf8类型字符串的长度。 |
5939
5940**示例:**
5941
5942```C++
5943std::string testUtf8 = "Hello world";
5944Local<StringRef> stringObj = StringRef::NewFromUtf8(vm, testUtf8.c_str());
5945int32_t lenght = stringObj->Utf8Length(vm);
5946```
5947
5948### WriteUtf8
5949
5950int StringRef::WriteUtf8(char *buffer, int length, bool isWriteBuffer);
5951
5952将StringRef的值写入char数组缓冲区。
5953
5954**参数:**
5955
5956| 参数名 | 类型 | 必填 | 说明 |
5957| ------------- | ------ | ---- | ------------------------------------- |
5958| buffer | char * | 是 | 需要写入的缓冲区。 |
5959| length | int | 是 | 需要写入缓冲区的长度。 |
5960| isWriteBuffer | bool | 否 | 是否需要将StringRef的值写入到缓冲区。 |
5961
5962**返回值:**
5963
5964| 类型 | 说明 |
5965| ---- | --------------------------------- |
5966| int | 将StringRef的值转为Utf8后的长度。 |
5967
5968**示例:**
5969
5970```C++
5971Local<StringRef> local = StringRef::NewFromUtf8(vm, "abcdefbb");
5972char cs[16] = {0};
5973int length = local->WriteUtf8(cs, 6);
5974```
5975
5976### WriteUtf16
5977
5978int StringRef::WriteUtf16(char16_t *buffer, int length);
5979
5980将StringRef的值写入char数组缓冲区。
5981
5982**参数:**
5983
5984| 参数名 | 类型 | 必填 | 说明 |
5985| ------ | ------ | ---- | ---------------------- |
5986| buffer | char * | 是 | 需要写入的缓冲区。 |
5987| length | int | 是 | 需要写入缓冲区的长度。 |
5988
5989**返回值:**
5990
5991| 类型 | 说明 |
5992| ---- | --------------------------------- |
5993| int | 将StringRef的值转为Utf8后的长度。 |
5994
5995**示例:**
5996
5997```c++
5998Local<StringRef> local = StringRef::NewFromUtf16(vm, u"您好,华为!");
5999char cs[16] = {0};
6000int length = local->WriteUtf16(cs, 3);
6001```
6002
6003### Length
6004
6005uint32_t StringRef::Length();
6006
6007获取StringRef的值的长度。
6008
6009**参数:**
6010
6011| 参数名 | 类型 | 必填 | 说明 |
6012| ------ | ---- | ---- | ---- |
6013| 无参 | | | |
6014
6015**返回值:**
6016
6017| 类型 | 说明 |
6018| ---- | --------------------- |
6019| int | StringRef的值的长度。 |
6020
6021**示例:**
6022
6023```c++
6024Local<StringRef> local = StringRef::NewFromUtf8(vm, "abcdefbb");
6025int len = local->Length()
6026```
6027
6028### ToString
6029
6030std::string StringRef::ToString();
6031
6032将StringRef的值转换为std::string。
6033
6034**参数:**
6035
6036| 参数名 | 类型 | 必填 | 说明 |
6037| ------ | ---- | ---- | ---- |
6038| 无参 | | | |
6039
6040**返回值:**
6041
6042| 类型 | 说明 |
6043| ----------- | ------------------------------------- |
6044| std::string | 将StringRef的value转为C++string类型。 |
6045
6046**示例:**
6047
6048```c++
6049Local<StringRef> stringObj = StringRef::NewFromUtf8(vm, "abc");
6050std::string str = stringObj->ToString();
6051```
6052
6053### GetNapiWrapperString
6054
6055Local<StringRef> StringRef::GetNapiWrapperString(const EcmaVM *vm);
6056
6057获取一个表示NAPI包装字符串的StringRef对象。
6058
6059**参数:**
6060
6061| 参数名 | 类型 | 必填 | 说明 |
6062| ------ | -------------- | ---- | ------------ |
6063| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6064
6065**返回值:**
6066
6067| 类型 | 说明 |
6068| ---------------- | ------------------------------------------------------------ |
6069| Local<StringRef> | 将表示NAPI包装字符串的对象转换为StringRef对象,并将其作为函数的返回值。 |
6070
6071**示例:**
6072
6073```c++
6074Local<StringRef> local = StringRef::GetNapiWrapperString(vm_);
6075```
6076
6077### WriteLatin1
6078
6079int WriteLatin1(char *buffer, int length);
6080
6081将字符串写入到指定的缓冲区中。
6082
6083**参数:**
6084
6085| 参数名 | 类型 | 必填 | 说明 |
6086| ------ | ------ | ---- | ---------------- |
6087| buffer | char * | 是 | 指定的缓冲区 |
6088| length | int | 是 | 要写入的数据长度 |
6089
6090**返回值:**
6091
6092| 类型 | 说明 |
6093| :--- | :--------------------- |
6094| int | 返回值为写入的字节数。 |
6095
6096**示例:**
6097
6098```c++
6099Local<StringRef> object = StringRef::NewFromUtf8(vm_, "abcdefbb");
6100char cs[16] = {0};
6101int result = object->WriteLatin1(cs, length);
6102```
6103
6104
6105
6106## NumberRef
6107
6108继承于PrimitiveRef,用于表示Number类型数据的引用,并提供了构造NumberRef对象的方法,以及对Number类型数据的一些操作。
6109
6110### New
6111
6112static Local<NumberRef> New(const EcmaVM *vm, double input);
6113
6114static Local<NumberRef> New(const EcmaVM *vm, int32_t input);
6115
6116static Local<NumberRef> New(const EcmaVM *vm, uint32_t input);
6117
6118static Local<NumberRef> New(const EcmaVM *vm, int64_t input);
6119
6120该接口为重载函数,用于构造不同数据类型的NumberRef对象。
6121
6122**参数:**
6123
6124| 参数名 | 类型 | 必填 | 说明 |
6125| ------ | -------------- | ---- | ---------------- |
6126| vm | const EcmaVM * | 是 | 虚拟机对象 |
6127| input | double | 是 | double类型数据 |
6128| input | int32_t | 是 | int32_t类型数据 |
6129| input | uint32_t | 是 | uint32_t类型数据 |
6130| input | int64_t | 是 | int64_t类型数据 |
6131
6132**返回值:**
6133
6134| 类型 | 说明 |
6135| :--------------- | :---------------------------------------- |
6136| Local<NumberRef> | 返回构造成功的不同数据类型的NumberRef对象 |
6137
6138**示例:**
6139
6140```c++
6141double doubleValue = 3.14;
6142Local<NumberRef> result = NumberRef::New(vm_, doubleValue);
6143int32_t int32Value = 10;
6144Local<NumberRef> result = NumberRef::New(vm_, int32Value);
6145uint32_t uint32Value = 10;
6146Local<NumberRef> result = NumberRef::New(vm_, uint32Value);
6147int64_t int64Value = 10;
6148Local<NumberRef> result = NumberRef::New(vm_, int64Value);
6149```
6150
6151
6152
6153## ArrayRef
6154
6155继承于ObjectRef,用于构造一个数组对象,并提供了一些操作数组的方法。
6156
6157### Length
6158
6159uint32_t Length(const EcmaVM *vm);
6160
6161获取数组对象的长度。
6162
6163**参数:**
6164
6165| 参数名 | 类型 | 必填 | 说明 |
6166| ------ | -------------- | ---- | ---------- |
6167| vm | const EcmaVM * | 是 | 虚拟机对象 |
6168
6169**返回值:**
6170
6171| 类型 | 说明 |
6172| :------- | :--------------------- |
6173| uint32_t | 返回获取到的数组长度。 |
6174
6175**示例:**
6176
6177```c++
6178Local<ArrayRef> arrayObj = ArrayRef::New(vm_, 3);
6179uint32_t result = arrayObj->Length(vm_);
6180```
6181
6182### SetValueAt
6183
6184static bool SetValueAt(const EcmaVM *vm, Local<JSValueRef> obj, uint32_t index, Local<JSValueRef> value);
6185
6186用于在给定的数组对象中设置指定索引位置的值。
6187
6188**参数:**
6189
6190| 参数名 | 类型 | 必填 | 说明 |
6191| ------ | ----------------- | ---- | -------------------- |
6192| vm | const EcmaVM * | 是 | 虚拟机对象 |
6193| obj | Local<JSValueRef> | 是 | 指定的数组对象 |
6194| index | uint32_t | 是 | 要设置的指定索引位置 |
6195| value | Local<JSValueRef> | 是 | 要设置的值 |
6196
6197**返回值:**
6198
6199| 类型 | 说明 |
6200| :------ | :---------------------------------------------------- |
6201| boolean | 指定索引位置的值设置成功,则返回true,否则返回false。 |
6202
6203**示例:**
6204
6205```c++
6206Local<ArrayRef> arrayObj = ArrayRef::New(vm_, 1);
6207Local<IntegerRef> intValue = IntegerRef::New(vm_, 0);
6208bool result = ArrayRef::SetValueAt(vm_, arrayObj, index, intValue);
6209```
6210
6211### GetValueAt
6212
6213static Local<JSValueRef> GetValueAt(const EcmaVM *vm, Local<JSValueRef> obj, uint32_t index);
6214
6215用于在给定的数组对象中获取指定索引位置的值。
6216
6217**参数:**
6218
6219| 参数名 | 类型 | 必填 | 说明 |
6220| ------ | ----------------- | ---- | -------------------- |
6221| vm | const EcmaVM * | 是 | 虚拟机对象 |
6222| obj | Local<JSValueRef> | 是 | 指定的数组对象 |
6223| index | uint32_t | 是 | 要获取的指定索引位置 |
6224
6225**返回值:**
6226
6227| 类型 | 说明 |
6228| :---------------- | :----------------------------- |
6229| Local<JSValueRef> | 返回获取到的指定索引位置的值。 |
6230
6231**示例:**
6232
6233```c++
6234Local<ArrayRef> arrayObj = ArrayRef::New(vm_, 1);
6235Local<IntegerRef> intValue = IntegerRef::New(vm_, 0);
6236ArrayRef::SetValueAt(vm_, arrayObj, index, intValue);
6237Local<JSValueRef> result = ArrayRef::GetValueAt(vm_, arrayObj, 0);
6238```
6239
6240### New
6241
6242Local<ArrayRef> ArrayRef::New(const EcmaVM *vm, uint32_t length = 0);
6243
6244创建一个具有指定长度的 JavaScript 数组对象。
6245
6246在创建数组对象之前,通过 `CHECK_HAS_PENDING_EXCEPTION_RETURN_UNDEFINED` 宏检查是否存在潜在的异常。
6247
6248使用 `JSArray::ArrayCreate` 方法创建 JavaScript 中的数组对象,指定数组的长度为 `length`。
6249
6250使用 `JSNApiHelper::ToLocal<ArrayRef>(array)` 将 JavaScript 中的数组对象转换为本地的 `ArrayRef` 对象。
6251
6252**参数:**
6253
6254| 参数名 | 类型 | 必填 | 说明 |
6255| ------ | -------------- | ---- | ------------------------ |
6256| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6257| length | uint32_t | 否 | 表示要创建的数组的长度。 |
6258
6259**返回值:**
6260
6261| 类型 | 说明 |
6262| --------------- | ---------------------- |
6263| Local<ArrayRef> | ArrayRef 类型的对象。 |
6264
6265**示例:**
6266
6267```c++
6268 Local<ArrayRef> myArray = ArrayRef::New(VM, length);
6269```
6270
6271
6272
6273## JsiRuntimeCallInfo
6274
6275主要用于处理JS运行时调用的信息,并提供了一些方法。
6276
6277### GetData
6278
6279void* GetData();
6280
6281获取JsiRuntimeCallInfo的数据。
6282
6283**参数:**
6284
6285无
6286
6287**返回值:**
6288
6289| 类型 | 说明 |
6290| :----- | :------------------------------------------- |
6291| void * | 返回值为从JsiRuntimeCallInfo中获取到的数据。 |
6292
6293**示例:**
6294
6295```c++
6296JsiRuntimeCallInfo object;
6297void *result = object.GetData();
6298```
6299
6300### GetVM
6301
6302EcmaVM *GetVM() const;
6303
6304获取与当前 `JsiRuntimeCallInfo` 对象相关联的 `EcmaVM` 指针。
6305
6306**参数:**
6307
6308无
6309
6310**返回值:**
6311
6312| 类型 | 说明 |
6313| ------- | ---------------- |
6314| EcmaVM* | 返回EcmaVM指针。 |
6315
6316**示例:**
6317
6318```c++
6319JsiRuntimeCallInfo callInfo;
6320EcmaVM *vm = callInfo.GetVM();
6321```
6322
6323
6324
6325## PromiseRejectInfo
6326
6327`PromiseRejectInfo` 类用于存储有关 Promise 被拒绝事件的信息,包括被拒绝的 Promise 对象、拒绝的原因、事件类型和与事件相关的数据。提供了相应的访问方法用于获取这些信息。
6328
6329### GetPromise
6330
6331Local<JSValueRef> GetPromise() const;
6332
6333获取一个Promise对象。
6334
6335**参数:**
6336
6337| 参数名 | 类型 | 必填 | 说明 |
6338| ------ | ---- | ---- | ---- |
6339| 无参 | | | |
6340
6341**返回值:**
6342
6343| 类型 | 说明 |
6344| ----------------- | ------------------------------------------------------------ |
6345| Local<JSValueRef> | 获取Promise对象,并将其转换为Local<JSValueRef>类型,作为函数的返回值。 |
6346
6347**示例:**
6348
6349```C++
6350Local<JSValueRef> promise(PromiseCapabilityRef::New(vm)->GetPromise(vm));
6351Local<StringRef> toStringReason = StringRef::NewFromUtf8(vm, "3.14");
6352Local<JSValueRef> reason(toStringReason);
6353void *data = static_cast<void *>(new std::string("promisereject"));
6354PromiseRejectInfo promisereject(promise, reason, PromiseRejectInfo::PROMISE_REJECTION_EVENT::REJECT, data);
6355Local<JSValueRef> obj = promisereject.GetPromise();
6356```
6357
6358### GetData
6359
6360void* PromiseRejectInfo::GetData() const
6361
6362返回存储在类的私有成员变量data_中的额外数据。
6363
6364**参数:**
6365
6366无
6367
6368**返回值:**
6369
6370| 类型 | 说明 |
6371| ------ | ------------------------------------------------------------ |
6372| void * | 返回值是一个通用指针(void *),它指向存储在类的私有成员变量data_中的额外数据。 |
6373
6374**示例:**
6375
6376```c++
6377Local<StringRef> toStringPromise = StringRef::NewFromUtf8(vm_, "-3.14");
6378Local<JSValueRef> promise(toStringPromise);
6379Local<StringRef> toStringReason = StringRef::NewFromUtf8(vm_, "3.14");
6380Local<JSValueRef> reason(toStringReason);
6381void *data = static_cast<void *>(new std::string("promisereject"));
6382PromiseRejectInfo promisereject(promise, reason, PromiseRejectInfo::PROMISE_REJECTION_EVENT::REJECT, data);
6383void *ptr = promisereject.GetData();
6384```
6385
6386### PromiseRejectInfo
6387
6388PromiseRejectInfo(Local<JSValueRef> promise, Local<JSValueRef> reason,PromiseRejectInfo::PROMISE_REJECTION_EVENT operation, void* data);
6389
6390创建一个 `PromiseRejectInfo` 对象,用于保存与 Promise 被拒绝事件相关的信息。
6391
6392将传入的 `promise`、`reason`、`operation` 和 `data` 参数存储在对象的成员变量中。
6393
6394**参数:**
6395
6396| 参数名 | 类型 | 必填 | 说明 |
6397| --------- | ------------------------------------------ | ---- | ------------------------------------- |
6398| promise | Local<JSValueRef> | 是 | 表示被拒绝的 Promise 对象。 |
6399| reason | Local<JSValueRef> | 是 | 表示 Promise 被拒绝的原因。 |
6400| operation | PromiseRejectInfo::PROMISE_REJECTION_EVENT | 是 | 表示 Promise 被拒绝的事件类型。 |
6401| data | void* | 是 | 表示与 Promise 被拒绝事件相关的数据。 |
6402
6403**返回值:**
6404
6405| 类型 | 说明 |
6406| ------------------------------------------ | ------------------------------------------ |
6407| PromiseRejectInfo::PROMISE_REJECTION_EVENT | `PromiseRejectInfo` 对象的操作类型枚举值。 |
6408
6409**示例:**
6410
6411```c++
6412PromiseRejectInfo::PROMISE_REJECTION_EVENT operationType = myRejectInfo.GetOperation();
6413```
6414
6415### GetReason
6416
6417 Local<JSValueRef> GetReason() const;
6418
6419获取存储在 `PromiseRejectInfo` 对象中的被拒绝的 Promise 的原因。
6420
6421**参数:**
6422
6423无
6424
6425**返回值:**
6426
6427| 类型 | 说明 |
6428| ----------------- | ------------------------------------------ |
6429| Local<JSValueRef> | `PromiseRejectInfo` 对象的操作类型枚举值。 |
6430
6431**示例:**
6432
6433```c++
6434Local<JSValueRef> rejectionReason = myRejectInfo.GetReason();
6435```
6436
6437### GetOperation
6438
6439PromiseRejectInfo::PROMISE_REJECTION_EVENT GetOperation() const;
6440
6441获取当前 `PromiseRejectInfo` 对象的操作类型。
6442
6443返回值是一个枚举值,表示 Promise 拒绝事件的具体操作类型。
6444
6445**参数:**
6446
6447无
6448
6449**返回值:**
6450
6451| 类型 | 说明 |
6452| ------------------------------------------ | ------------------------------------------ |
6453| PromiseRejectInfo::PROMISE_REJECTION_EVENT | `PromiseRejectInfo` 对象的操作类型枚举值。 |
6454
6455**示例:**
6456
6457```c++
6458PromiseRejectInfo::PROMISE_REJECTION_EVENT operationType = myRejectInfo.GetOperation();
6459```
6460
6461
6462
6463## PromiseCapabilityRef
6464
6465`PromiseCapabilityRef` 类是 `ObjectRef` 类的子类,专门用于处理 Promise 对象的功能。它提供了创建新的 PromiseCapability 对象、解决 Promise、拒绝 Promise 以及获取 Promise 的方法。
6466
6467### Resolve
6468
6469bool Resolve(const EcmaVM *vm, Local<JSValueRef> value);
6470
6471用于敲定Promise对象。
6472
6473**参数:**
6474
6475| 参数名 | 类型 | 必填 | 说明 |
6476| ------ | ----------------- | ---- | ---------------------------- |
6477| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6478| value | Local<JSValueRef> | 是 | 执行回调函数是所需要的参数。 |
6479
6480**返回值:**
6481
6482| 类型 | 说明 |
6483| ---- | ----------------------------------- |
6484| bool | Promise对象的回调函数是否成功调用。 |
6485
6486**示例:**
6487
6488```c++
6489Local<JSValueRef> FunCallback(JsiRuntimeCallInfo *info)
6490{
6491 EscapeLocalScope scope(info->GetVM());
6492 return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
6493}
6494Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm);
6495Local<PromiseRef> promise = capability->GetPromise(vm);
6496promise->Then(vm, FunctionRef::New(vm, FunCallback), FunctionRef::New(vm, FunCallback));
6497bool b = capability->Resolve(vm, NumberRef::New(vm, 300.3));
6498```
6499
6500### Reject
6501
6502bool Reject(const EcmaVM *vm, Local<JSValueRef> reason);
6503
6504用于拒绝Promise对象。
6505
6506**参数:**
6507
6508| 参数名 | 类型 | 必填 | 说明 |
6509| ------ | ----------------- | ---- | ---------------------------- |
6510| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6511| value | Local<JSValueRef> | 是 | 执行回调函数是所需要的参数。 |
6512
6513**返回值:**
6514
6515| 类型 | 说明 |
6516| ---- | ----------------------------------- |
6517| bool | Promise对象的回调函数是否成功调用。 |
6518
6519**示例:**
6520
6521```C++
6522Local<JSValueRef> FunCallback(JsiRuntimeCallInfo *info)
6523{
6524 EscapeLocalScope scope(info->GetVM());
6525 return scope.Escape(ArrayRef::New(info->GetVM(), info->GetArgsNumber()));
6526}
6527Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm);
6528Local<PromiseRef> promise = capability->GetPromise(vm);
6529promise->Then(vm, FunctionRef::New(vm, FunCallback), FunctionRef::New(vm, FunCallback));
6530bool b = capability->Reject(vm, NumberRef::New(vm, 300.3));
6531```
6532
6533### GetPromise
6534
6535Local<PromiseRef> GetPromise(const EcmaVM *vm);
6536
6537获取与当前对象关联的Promise对象。
6538
6539**参数:**
6540
6541| 参数名 | 类型 | 必填 | 说明 |
6542| ------ | -------------- | ---- | ------------ |
6543| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6544
6545**返回值:**
6546
6547| 类型 | 说明 |
6548| ----------------- | ------------------------------------------------------------ |
6549| Local<PromiseRef> | 获取Promise对象,并将其转换为本地引用(PromiseRef类型)返回。 |
6550
6551**示例:**
6552
6553```c++
6554Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm_);
6555Local<PromiseRef> promise = capability->GetPromise(vm_);
6556```
6557
6558### new
6559
6560static Local<PromiseCapabilityRef> New(const EcmaVM *vm);
6561
6562创建一个新的 `PromiseCapability` 对象,并返回对该对象的本地引用。
6563
6564在创建之前,通过 `CHECK_HAS_PENDING_EXCEPTION_RETURN_UNDEFINED` 宏检查是否存在潜在的异常。
6565
6566获取虚拟机的线程、工厂对象和全局环境。
6567
6568使用全局环境中的 `GetPromiseFunction` 函数获取 `Promise` 构造函数。
6569
6570调用 `JSPromise::NewPromiseCapability` 方法创建新的 `PromiseCapability` 对象。
6571
6572**参数:**
6573
6574| 参数名 | 类型 | 必填 | 说明 |
6575| ------ | -------------- | ---- | ------------ |
6576| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6577
6578**返回值:**
6579
6580| 类型 | 说明 |
6581| --------------------------- | ------------------------------------------ |
6582| Local<PromiseCapabilityRef> | `PromiseRejectInfo` 对象的操作类型枚举值。 |
6583
6584**示例:**
6585
6586```c++
6587Local<PromiseCapabilityRef> myPromiseCapability = PromiseCapabilityRef::New(vm);
6588```
6589
6590
6591
6592## SymbolRef : public PrimitiveRef
6593
6594这个类继承自PrimitiveRef类,主要用于定义一个名为`SymbolRef`的公共API类。
6595
6596### New
6597
6598static Local<SymbolRef> New(const EcmaVM *vm, Local<StringRef> description = Local<StringRef>());
6599
6600用于创建一个新的`SymbolRef`对象。
6601
6602**参数:**
6603
6604| 参数名 | 类型 | 必填 | 说明 |
6605| ----------- | ---------------- | ---- | ------------------------------------------------------------ |
6606| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6607| description | Local<StringRef> | 否 | 可选的`Local<StringRef>`类型的描述。如果没有提供描述,则默认为空。 |
6608
6609**返回值:**
6610
6611| 类型 | 说明 |
6612| ---------------- | ----------------------------------------- |
6613| Local<SymbolRef> | 创建一个新的SymbolRef类型对象并将其返回。 |
6614
6615**示例:**
6616
6617```c++
6618SymbolRef::New(vm_);
6619```
6620
6621### GetDescription
6622
6623Local<StringRef> GetDescription(const EcmaVM *vm);
6624
6625获取符号引用的描述。
6626
6627| 参数名 | 类型 | 必填 | 说明 |
6628| ------ | -------------- | ---- | ------------ |
6629| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6630
6631**返回值:**
6632
6633| 类型 | 说明 |
6634| ---------------- | -------------------------------------- |
6635| Local<StringRef> | 将符号描述的句柄转换为本地引用并返回。 |
6636
6637**示例:**
6638
6639```c++
6640SymbolRef::GetDescription(vm_);
6641```
6642
6643
6644
6645## FunctionCallScope
6646
6647这个类用于管理函数调用的作用域。
6648
6649### FunctionCallScope
6650
6651FunctionCallScope::FunctionCallScope(EcmaVM *vm) : vm_(vm);
6652
6653FunctionCallScope类的带参构造函数。
6654
6655**参数:**
6656
6657| 参数名 | 类型 | 必填 | 说明 |
6658| ------ | -------------- | ---- | ------------ |
6659| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6660
6661**返回值:**
6662
6663无
6664
6665**示例:**
6666
6667```c++
6668FunctionCallScope::FunctionCallScope FC(vm_);
6669```
6670
6671
6672
6673## LocalScope
6674
6675该类的作用是管理局部作用域,包括跟踪前一个和后一个局部作用域、前一个局部作用域的结束位置、前一个局部作用域的句柄存储索引以及线程信息。
6676
6677### LocalScope
6678
6679explicit LocalScope(const EcmaVM *vm);
6680
6681初始化 LocalScope 对象,并设置其关联的 EcmaVM实例。
6682
6683**参数:**
6684
6685| 参数名 | 类型 | 必填 | 说明 |
6686| ------ | -------------- | ---- | ------------ |
6687| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6688
6689**返回值:**
6690
6691无
6692
6693**示例:**
6694
6695```c++
6696LocalScope::LocalScope Scope(vm_);
6697```
6698
6699### LocalScope
6700
6701inline LocalScope(const EcmaVM *vm, JSTaggedType value);
6702
6703构造函数:用于初始化 `LocalScope` 类的对象。
6704
6705获取当前线程的 `JSThread` 对象。
6706
6707通过 `reinterpret_cast` 将线程对象转换为 `JSThread*` 类型。
6708
6709使用 `EcmaHandleScope::NewHandle` 方法在句柄作用域中创建一个新的本地句柄。
6710
6711**参数:**
6712
6713| 参数名 | 类型 | 必填 | 说明 |
6714| ------ | -------------- | ---- | ---------------------------- |
6715| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6716| value | JSTaggedType | 是 | 表示要存储在本地句柄中的值。 |
6717
6718**返回值:**
6719
6720无
6721
6722**示例:**
6723
6724```c++
6725 LocalScope myLocalScope(myEcmaVM, someJSTaggedValue);
6726```
6727
6728
6729
6730## SetRef : public ObjectRef
6731
6732该类是继承自ObjectRef类的子类。它的作用是表示一个JavaScript的Set对象,并提供了获取其大小、总元素数量以及获取指定索引位置的元素值的方法。
6733
6734### GetSize
6735
6736int32_t SetRef::GetSize();
6737
6738获取一个SetRef对象的大小。
6739
6740**参数:**
6741
6742无
6743
6744**返回值:**
6745
6746| 类型 | 说明 |
6747| ------- | ------------------------------------------------- |
6748| int32_t | 返回一个int32_t类型的数值,表示SetRef对象的大小。 |
6749
6750**示例:**
6751
6752```c++
6753Local<SetRef> object = SetRef::New(vm_);
6754Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
6755Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
6756object->Set(vm_, key, value);
6757int32_t size = object->GetSize();
6758```
6759
6760### GetTotalElements
6761
6762int32_t SetRef::GetTotalElements();
6763
6764获取一个SetRef对象中所有元素的总数,包括已删除的元素。
6765
6766**参数:**
6767
6768无
6769
6770**返回值:**
6771
6772| 类型 | 说明 |
6773| ------- | ------------------------------------------------------------ |
6774| int32_t | 返回一个int32_t类型的数值,表示SetRef对象中所有元素的总数,包括已删除的元素。 |
6775
6776**示例:**
6777
6778```c++
6779Local<SetRef> object = SetRef::New(vm_);
6780Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
6781Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
6782object->Set(vm_, key, value);
6783int32_t element = object->GetTotalElements();
6784```
6785
6786### GetValue
6787
6788Local<JSValueRef> SetRef::GetValue(const EcmaVM *vm, int entry);
6789
6790获取SetRef对象中指定索引位置的元素值。
6791
6792**参数:**
6793
6794| 参数名 | 类型 | 必填 | 说明 |
6795| ------ | -------------- | ---- | ---------------------------------------------------- |
6796| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6797| entry | int | 是 | 一个整数,表示要获取的元素在SetRef对象中的索引位置。 |
6798
6799**返回值:**
6800
6801| 类型 | 说明 |
6802| ----------------- | ------------------------------------------------------------ |
6803| Local<JSValueRef> | 获取指定索引位置的元素值后,将其转换为Local<JSValueRef>类型的对象,并作为函数的返回值。 |
6804
6805**示例:**
6806
6807```c++
6808Local<SetRef> object = SetRef::New(vm_);
6809Local<JSValueRef> key = StringRef::NewFromUtf8(vm_, "TestKey");
6810Local<JSValueRef> value = StringRef::NewFromUtf8(vm_, "TestValue");
6811object->Set(vm_, key, value);
6812Local<JSValueRef> value = object->GetValue(vm_, 0);
6813```
6814
6815
6816
6817## BigUint64ArrayRef : public TypedArrayRef
6818
6819该类继承自TypedArrayRef类,用于表示一个64位无符号整数数组。
6820
6821### New
6822
6823static Local<BigUint64ArrayRef> New(const EcmaVM *vm, Local<ArrayBufferRef> buffer, int32_t byteOffset, int32_t length);
6824
6825静态成员函数,用于创建一个新的BigUint64ArrayRef对象。
6826
6827**参数:**
6828
6829| 参数名 | 类型 | 必填 | 说明 |
6830| ---------- | --------------------- | ---- | ------------------------------------------------------ |
6831| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6832| buffer | Local<ArrayBufferRef> | 是 | 一个ArrayBufferRef类型的局部变量,要存储数据的缓冲区。 |
6833| byteOffset | int32_t | 是 | 一个32位整数,表示在缓冲区中的字节偏移量。 |
6834| length | int32_t | 是 | 一个32位整数,表示数组的长度。 |
6835
6836**返回值:**
6837
6838| 类型 | 说明 |
6839| ------------------------ | --------------------------------------------- |
6840| Local<BigUint64ArrayRef> | 返回一个创建好的BigUint64ArrayRef类型的对象。 |
6841
6842**示例:**
6843
6844```c++
6845Local<ArrayBufferRef> array = ArrayBufferRef::New(/*....所需参数....*/);
6846int32_t byteOffset = 3;
6847int32_t length = 40;
6848Local<BigUint64ArrayRef> bu64array = BigUint64ArrayRef::New(vm_, array, byteOffset, length);
6849```
6850
6851
6852
6853## Float32ArrayRef : public TypedArrayRef
6854
6855该类继承自TypedArrayRef类,作用是创建一个浮点数类型的数组引用,可以用于操作和访问浮点数类型的数据。
6856
6857### New
6858
6859static Local<Float32ArrayRef> New(const EcmaVM *vm, Local<ArrayBufferRef> buffer, int32_t byteOffset, int32_t length);
6860
6861静态成员函数,用于创建一个新的Float32ArrayRef对象。
6862
6863**参数:**
6864
6865| 参数名 | 类型 | 必填 | 说明 |
6866| ---------- | --------------------- | ---- | ------------------------------------------------------ |
6867| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6868| buffer | Local<ArrayBufferRef> | 是 | 一个ArrayBufferRef类型的局部变量,要存储数据的缓冲区。 |
6869| byteOffset | int32_t | 是 | 一个32位整数,表示在缓冲区中的字节偏移量。 |
6870| length | int32_t | 是 | 一个32位整数,表示数组的长度。 |
6871
6872**返回值:**
6873
6874| 类型 | 说明 |
6875| ---------------------- | ------------------------------------------------------------ |
6876| Local<Float32ArrayRef> | 返回一个Float32ArrayRef类型的对象,表示创建的浮点数类型数组引用。 |
6877
6878**示例:**
6879
6880```c++
6881Local<ArrayBufferRef> array = ArrayBufferRef::New(/*....所需参数....*/);
6882int32_t byteOffset = 3;
6883int32_t length = 40;
6884Local<Float32ArrayRef> fl32array = Float32ArrayRef::New(vm_, array, byteOffset, length);
6885```
6886
6887
6888
6889## Float64ArrayRef : public TypedArrayRef
6890
6891该类继承自TypedArrayRef类,表示一个64位浮点数类型的数组引用。
6892
6893### New
6894
6895static Local<Float64ArrayRef> New(const EcmaVM *vm, Local<ArrayBufferRef> buffer, int32_t byteOffset, int32_t length);
6896
6897静态成员函数,用于创建一个新的Float64ArrayRef对象。
6898
6899**参数:**
6900
6901| 参数名 | 类型 | 必填 | 说明 |
6902| ---------- | --------------------- | ---- | ------------------------------------------------------ |
6903| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6904| buffer | Local<ArrayBufferRef> | 是 | 一个ArrayBufferRef类型的局部变量,要存储数据的缓冲区。 |
6905| byteOffset | int32_t | 是 | 一个32位整数,表示在缓冲区中的字节偏移量。 |
6906| length | int32_t | 是 | 一个32位整数,表示数组的长度。 |
6907
6908**返回值:**
6909
6910| 类型 | 说明 |
6911| ---------------------- | ------------------------------------------------------------ |
6912| Local<Float64ArrayRef> | 返回一个Float64ArrayRef类型的对象,表示创建的浮点数类型数组引用。 |
6913
6914**示例:**
6915
6916```c++
6917Local<ArrayBufferRef> array = ArrayBufferRef::New(/*....所需参数....*/);
6918int32_t byteOffset = 3;
6919int32_t length = 40;
6920Local<Float64ArrayRef> fl32array = Float64ArrayRef::New(vm_, array, byteOffset, length);
6921```
6922
6923
6924
6925## Int8ArrayRef : public TypedArrayRef
6926
6927该类继承自 TypedArrayRef 类。其作用是创建一个表示 8 位整数类型的数组引用。
6928
6929### New
6930
6931static Local<Int8ArrayRef> New(const EcmaVM *vm, Local<ArrayBufferRef> buffer, int32_t byteOffset, int32_t length);
6932
6933创建一个新的Int8ArrayRef对象。
6934
6935**参数:**
6936
6937| 参数名 | 类型 | 必填 | 说明 |
6938| ---------- | --------------------- | ---- | ------------------------------------------------------ |
6939| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6940| buffer | Local<ArrayBufferRef> | 是 | 一个ArrayBufferRef类型的局部变量,要存储数据的缓冲区。 |
6941| byteOffset | int32_t | 是 | 一个32位整数,表示在缓冲区中的字节偏移量。 |
6942| length | int32_t | 是 | 一个32位整数,表示数组的长度。 |
6943
6944**返回值:**
6945
6946| 类型 | 说明 |
6947| ------------------- | -------------------------------------------- |
6948| Local<Int8ArrayRef> | 返回一个新创建的Int8ArrayRef对象的本地引用。 |
6949
6950**示例:**
6951
6952```c++
6953const int32_t length = 15;
6954Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
6955Local<Int8ArrayRef> obj = Int8ArrayRef::New(vm_, arrayBuffer, 5, 6);
6956```
6957
6958
6959
6960## Int16ArrayRef : public TypedArrayRef
6961
6962该类继承自 TypedArrayRef 类。其作用是创建一个表示 16位整数类型的数组引用。
6963
6964### New
6965
6966static Local<Int16ArrayRef> New(const EcmaVM *vm, Local<ArrayBufferRef> buffer, int32_t byteOffset, int32_t length);
6967
6968创建一个新的Int16ArrayRef对象。
6969
6970**参数:**
6971
6972| 参数名 | 类型 | 必填 | 说明 |
6973| ---------- | --------------------- | ---- | ------------------------------------------------------ |
6974| vm | const EcmaVM * | 是 | 虚拟机对象。 |
6975| buffer | Local<ArrayBufferRef> | 是 | 一个ArrayBufferRef类型的局部变量,要存储数据的缓冲区。 |
6976| byteOffset | int32_t | 是 | 一个32位整数,表示在缓冲区中的字节偏移量。 |
6977| length | int32_t | 是 | 一个32位整数,表示数组的长度。 |
6978
6979**返回值:**
6980
6981| 类型 | 说明 |
6982| -------------------- | --------------------------------------------- |
6983| Local<Int16ArrayRef> | 返回一个新创建的Int16ArrayRef对象的本地引用。 |
6984
6985**示例:**
6986
6987```c++
6988const int32_t length = 15;
6989Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
6990Local<Int16ArrayRef> obj = Int16ArrayRef::New(vm_, arrayBuffer, 5, 6);
6991```
6992
6993
6994
6995## Int32ArrayRef : public TypedArrayRef
6996
6997该类继承自 TypedArrayRef 类。其作用是创建一个表示 32位整数类型的数组引用。
6998
6999### New
7000
7001static Local<Int32ArrayRef> New(const EcmaVM *vm, Local<ArrayBufferRef> buffer, int32_t byteOffset, int32_t length);
7002
7003创建一个新的Int32ArrayRef对象。
7004
7005**参数:**
7006
7007| 参数名 | 类型 | 必填 | 说明 |
7008| ---------- | --------------------- | ---- | ------------------------------------------------------ |
7009| vm | const EcmaVM * | 是 | 虚拟机对象。 |
7010| buffer | Local<ArrayBufferRef> | 是 | 一个ArrayBufferRef类型的局部变量,要存储数据的缓冲区。 |
7011| byteOffset | int32_t | 是 | 一个32位整数,表示在缓冲区中的字节偏移量。 |
7012| length | int32_t | 是 | 一个32位整数,表示数组的长度。 |
7013
7014**返回值:**
7015
7016| 类型 | 说明 |
7017| -------------------- | --------------------------------------------- |
7018| Local<Int32ArrayRef> | 返回一个新创建的Int32ArrayRef对象的本地引用。 |
7019
7020**示例:**
7021
7022```c++
7023const int32_t length = 15;
7024Local<ArrayBufferRef> arrayBuffer = ArrayBufferRef::New(vm_, length);
7025Local<Int32ArrayRef> obj = Int32ArrayRef::New(vm_, arrayBuffer, 5, 6);
7026```
7027
7028
7029
7030## ProxyRef : public ObjectRef
7031
7032该类继承自ObjectRef类,主要用于处理JavaScript代理对象。
7033
7034### GetTarget
7035
7036Local<JSValueRef> GetTarget(const EcmaVM *vm);
7037
7038获取JavaScript代理对象的目标对象。
7039
7040**参数:**
7041
7042| 参数名 | 类型 | 必填 | 说明 |
7043| ------ | -------------- | ---- | ------------ |
7044| vm | const EcmaVM * | 是 | 虚拟机对象。 |
7045
7046**返回值:**
7047
7048| 类型 | 说明 |
7049| ----------------- | ------------------------------------------------------------ |
7050| Local<JSValueRef> | 返回一个JSValueRef类型的对象,它表示JavaScript代理对象的目标对象。 |
7051
7052**示例:**
7053
7054```c++
7055JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
7056ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
7057JSHandle<JSTaggedValue> hclass(thread_, env->GetObjectFunction().GetObject<JSFunction>());
7058JSHandle<JSTaggedValue> targetHandle(factory->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
7059JSHandle<JSTaggedValue> key(factory->NewFromASCII("x"));
7060JSHandle<JSTaggedValue> value(thread_, JSTaggedValue(1));
7061JSObject::SetProperty(thread_, targetHandle, key, value);
7062JSHandle<JSTaggedValue> handlerHandle(
7063 factory->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
7064JSHandle<JSProxy> proxyHandle = JSProxy::ProxyCreate(thread_, targetHandle, handlerHandle);
7065JSHandle<JSTaggedValue> proxytagvalue = JSHandle<JSTaggedValue>::Cast(proxyHandle);
7066Local<ProxyRef> object = JSNApiHelper::ToLocal<ProxyRef>(proxytagvalue);
7067Local<JSValueRef> value = object->GetTarget(vm_);
7068```
7069
7070### IsRevoked
7071
7072bool ProxyRef::IsRevoked();
7073
7074检查JavaScript代理对象是否已被撤销。
7075
7076**参数:**
7077
7078无
7079
7080**返回值:**
7081
7082| 类型 | 说明 |
7083| ---- | ------------------------------------------------------------ |
7084| bool | 布尔值:true 或 false。如果代理对象已被撤销,返回true。否则,返回false。 |
7085
7086**示例:**
7087
7088```c++
7089JSHandle<GlobalEnv> env = vm_->GetGlobalEnv();
7090ObjectFactory *factory = thread_->GetEcmaVM()->GetFactory();
7091JSHandle<JSTaggedValue> hclass(thread_, env->GetObjectFunction().GetObject<JSFunction>());
7092JSHandle<JSTaggedValue> targetHandle(factory->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
7093JSHandle<JSTaggedValue> key(factory->NewFromASCII("x"));
7094JSHandle<JSTaggedValue> value(thread_, JSTaggedValue(1));
7095JSObject::SetProperty(thread_, targetHandle, key, value);
7096JSHandle<JSTaggedValue> handlerHandle(
7097 factory->NewJSObjectByConstructor(JSHandle<JSFunction>::Cast(hclass), hclass));
7098JSHandle<JSProxy> proxyHandle = JSProxy::ProxyCreate(thread_, targetHandle, handlerHandle);
7099JSHandle<JSTaggedValue> proxytagvalue = JSHandle<JSTaggedValue>::Cast(proxyHandle);
7100Local<ProxyRef> object = JSNApiHelper::ToLocal<ProxyRef>(proxytagvalue);
7101bool b = object->IsRevoked();
7102```
7103
7104### GetHandler
7105
7106Local<JSValueRef> GetHandler(const EcmaVM *vm);
7107
7108获取对象的处理程序。
7109
7110**参数:**
7111
7112| 参数名 | 类型 | 必填 | 说明 |
7113| ------ | -------------- | ---- | ---------- |
7114| vm | const EcmaVM * | 是 | 虚拟机对象 |
7115
7116**返回值:**
7117
7118| 类型 | 说明 |
7119| :---------------- | :------------------- |
7120| Local<JSValueRef> | 返回对象的处理程序。 |
7121
7122**示例:**
7123
7124```c++
7125JSHandle<JSTaggedValue> targetHandle;
7126JSHandle<JSTaggedValue> handlerHandle;
7127JSHandle<JSProxy> proxyHandle = JSProxy::ProxyCreate(thread_, targetHandle, handlerHandle);
7128JSHandle<JSTaggedValue> proxytagvalue = JSHandle<JSTaggedValue>::Cast(proxyHandle);
7129Local<JSValueRef> result = JSNApiHelper::ToLocal<ProxyRef>(proxytagvalue)->GetHandler(vm_);
7130```
7131
7132## EscapeLocalScope:LocalScope
7133
7134`EscapeLocalScope` 类是一个继承自 `LocalScope` 的具体子类,用于管理局部变量的生命周期。
7135它提供了一个方法 `Escape`,允许在局部范围内提前返回局部变量的 `Local` 对象。
7136
7137### EscapeLocalScope
7138
7139explicit EscapeLocalScope(const EcmaVM *vm);
7140
7141构造EscapeLocalScope对象。
7142
7143**参数:**
7144
7145| 参数名 | 类型 | 必填 | 说明 |
7146| ------ | -------------- | ---- | ------------ |
7147| vm | const EcmaVM * | 是 | 虚拟机对象。 |
7148
7149**返回值:**
7150
7151无
7152
7153**示例:**
7154
7155```c++
7156EscapeLocalScope scope(vm);
7157```
7158
7159## SetIteratorRef:ObjectRef
7160
7161SetIteratorRef 类是一个继承自 ObjectRef 的具体子类,用于操作 JavaScript Set 对象的迭代器。
7162
7163### GetIndex
7164
7165int32_t GetIndex();
7166
7167获取当前 `SetIteratorRef` 对象关联的 Set 迭代器的当前索引。
7168
7169通过 `JSNApiHelper::ToJSHandle(this)` 将当前的 `SetIteratorRef` 对象转换为 JavaScript 中的 `JSSetIterator` 对象。
7170
7171调用 `JSSetIterator` 对象的 `GetNextIndex` 方法获取当前迭代器的索引。
7172
7173**参数:**
7174
7175无
7176
7177**返回值:**
7178
7179| 类型 | 说明 |
7180| ------- | ------------------ |
7181| int32_t | 当前迭代器的索引。 |
7182
7183**示例:**
7184
7185```c++
7186int32_t currentIndex = mySetIterator.GetIndex();
7187```
7188
7189### GetKind
7190
7191Local<JSValueRef> GetKind(const EcmaVM *vm);
7192
7193获取当前 `SetIteratorRef` 对象关联的 Set 迭代器的迭代类型。
7194
7195在获取之前,通过 `CHECK_HAS_PENDING_EXCEPTION_RETURN_UNDEFINED` 宏检查是否存在潜在的异常。
7196
7197 通过 `JSNApiHelper::ToJSHandle(this)` 将当前的 `SetIteratorRef` 对象转换为 JavaScript 中的 `JSSetIterator` 对象。
7198
7199调用 `JSSetIterator` 对象的 `GetIterationKind` 方法获取迭代类型。
7200
7201根据迭代类型选择相应的字符串,然后使用 `StringRef::NewFromUtf8` 方法创建一个 `Local<JSValueRef>` 对象,表示字符串值。
7202
7203**参数:**
7204
7205| 参数名 | 类型 | 必填 | 说明 |
7206| ------ | -------------- | ---- | ------------ |
7207| vm | const EcmaVM * | 是 | 虚拟机对象。 |
7208
7209**返回值:**
7210
7211| 类型 | 说明 |
7212| ----------------- | ---------------------------- |
7213| Local<JSValueRef> | 返回表示迭代类型的字符串值。 |
7214
7215**示例:**
7216
7217```c++
7218Local<JSValueRef> iterationType = mySetIterator.GetKind(myEcmaVM);
7219```
7220
7221## Uint8ClampedArrayRef:TypedArrayRef
7222
7223Uint8ClampedArrayRef 类是一个继承自 TypedArrayRef 的具体子类,用于操作 JavaScript 中的 Uint8ClampedArray 对象。
7224
7225### New
7226static Local<Uint8ClampedArrayRef> New(const EcmaVM *vm, Local<ArrayBufferRef> buffer, int32_t byteOffset,int32_t length);
7227构造Uint8ClampedArrayRef对象。
7228
7229会调用宏定义创建 TypedArray 的通用模板。
7230
7231**参数:**
7232
7233| 参数名 | 类型 | 必填 | 说明 |
7234| ---------- | --------------------- | ---- | ----------------------------------------------------------- |
7235| vm | const EcmaVM * | 是 | 虚拟机对象。 |
7236| buffer | Local<ArrayBufferRef> | 是 | 表示与 `Uint8ClampedArray` 关联的 ArrayBuffer 对象。 |
7237| byteOffset | int32_t | 是 | 表示从 ArrayBuffer 的哪个字节开始创建 `Uint8ClampedArray`。 |
7238| length | int32_t | 是 | 表示要创建的 `Uint8ClampedArray` 的长度。 |
7239
7240**返回值:**
7241
7242| 类型 | 说明 |
7243| --------------------------- | ---------------------------------------- |
7244| Local<Uint8ClampedArrayRef> | 返回`Local<Uint8ClampedArrayRef>` 对象。 |
7245
7246
7247
7248**示例:**
7249
7250```c++
7251Local<Uint8ClampedArrayRef> myUint8ClampedArray = Uint8ClampedArrayRef::New(myEcmaVM, myArrayBuffer, Offset, length);
7252```
7253
7254## Uint16ArrayRef:TypedArrayRef
7255
7256Uint16ArrayRef 类是一个继承自 TypedArrayRef 的具体子类,用于操作 JavaScript 中的 Uint16Array 对象。
7257
7258### New
7259
7260static Local<Uint16ArrayRef> New(const EcmaVM *vm, Local<ArrayBufferRef> buffer, int32_t byteOffset,int32_t length);
7261
7262通过该函数在 JavaScript 环境中创建一个新的 `Uint16Array` 对象。
7263
7264**参数:**
7265
7266| 参数名 | 类型 | 必填 | 说明 |
7267| ---------- | --------------------- | ---- | ----------------------------------------------------- |
7268| vm | const EcmaVM * | 是 | 虚拟机对象。 |
7269| buffer | Local<ArrayBufferRef> | 是 | 表示与 `Uint16Array` 关联的 ArrayBuffer 对象。 |
7270| byteOffset | int32_t | 是 | 表示从 ArrayBuffer 的哪个字节开始创建 `Uint16Array`。 |
7271| length | int32_t | 是 | 表示要创建的 `Uint16Array` 的长度。 |
7272
7273**返回值:**
7274
7275| 类型 | 说明 |
7276| --------------------- | ---------------------------------- |
7277| Local<Uint16ArrayRef> | 返回`Local<Uint16ArrayRef>` 对象。 |
7278
7279**示例:**
7280
7281```c++
7282Local<Uint16ArrayRef> myUint16Array = Uint16ArrayRef::New(myEcmaVM, myArrayBuffer, Offset, length);
7283```
7284