jsvm.h

概述

提供JSVM-API接口定义。

通过API接口为开发者提供独立、标准、完整的JavaScript引擎能力, 包括管理引擎生命周期、编译运行JS代码、实现JS/C++跨语言调用、拍摄快照等。

库: libjsvm.so

系统能力: SystemCapability.ArkCompiler.JSVM

起始版本: 11

相关模块:JSVM

汇总

宏定义

名称 描述
JSVM_VERSION_EXPERIMENTAL   2147483647
JSVM_VERSION   8
JSVM_EXTERN   attribute((visibility("default")))
JSVM_AUTO_LENGTH   SIZE_MAX 自动长度。
EXTERN_C_START
EXTERN_C_END

函数

名称 描述
EXTERN_C_START JSVM_EXTERN JSVM_StatusOH_JSVM_Init (const JSVM_InitOptions *options) 初始化一个JavaScript虚拟机。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateVM (const JSVM_CreateVMOptions *options, JSVM_VM *result) 创建一个虚拟机实例。
JSVM_EXTERN JSVM_StatusOH_JSVM_DestroyVM (JSVM_VM vm) 销毁一个虚拟机实例。
JSVM_EXTERN JSVM_StatusOH_JSVM_OpenVMScope (JSVM_VM vm, JSVM_VMScope *result) 为虚拟机实例打开一个新的虚拟机作用域。
JSVM_EXTERN JSVM_StatusOH_JSVM_CloseVMScope (JSVM_VM vm, JSVM_VMScope scope) 关闭虚拟机实例的虚拟机作用域。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateEnv (JSVM_VM vm, size_t propertyCount, const JSVM_PropertyDescriptor *properties, JSVM_Env *result) 基于新环境上下文的可选属性,创建一个新环境。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateEnvFromSnapshot (JSVM_VM vm, size_t index, JSVM_Env *result) 基于虚拟机的起始快照,创建一个新的环境。
JSVM_EXTERN JSVM_StatusOH_JSVM_DestroyEnv (JSVM_Env env) 销毁环境。
JSVM_EXTERN JSVM_StatusOH_JSVM_OpenEnvScope (JSVM_Env env, JSVM_EnvScope *result) 打开一个新的环境作用域。
JSVM_EXTERN JSVM_StatusOH_JSVM_CloseEnvScope (JSVM_Env env, JSVM_EnvScope scope) 关闭环境作用域。
JSVM_EXTERN JSVM_StatusOH_JSVM_CompileScript (JSVM_Env env, JSVM_Value script, const uint8_t *cachedData, size_t cacheDataLength, bool eagerCompile, bool *cacheRejected, JSVM_Script *result) 编译一串JavaScript代码,并返回编译后的脚本。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateCodeCache (JSVM_Env env, JSVM_Script script, const uint8_t **data, size_t *length) 为编译后的脚本创建代码缓存。
JSVM_EXTERN JSVM_StatusOH_JSVM_RunScript (JSVM_Env env, JSVM_Script script, JSVM_Value *result) 执行一串JavaScript代码并返回其结果,其中包含以下注意事项: 与eval不同的是,该函数不允许脚本访问当前词法作用域,因此也不允许访问模块作用域, 这意味着require等伪全局变量将不可用。 脚本可以访问全局作用域。 脚本中的函数和var声明将被添加到全局对象。 使用let和const的变量声明将全局可见,但不会被添加到全局对象。 this的值在脚本内是global。
JSVM_EXTERN JSVM_StatusOH_JSVM_SetInstanceData (JSVM_Env env, void *data, JSVM_Finalize finalizeCb, void *finalizeHint) 将data与当前运行的JSVM环境相关联。后续可以使用OH_JSVM_GetInstanceData()检索data。 通过先前调用OH_JSVM_SetInstanceData()设置的任何与当前运行的JSVM环境相关联的现有数据都将 被覆盖。如果先前提供了finalizeCb,则不会调用它。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetInstanceData (JSVM_Env env, void **data) 检索通过OH_JSVM_SetInstanceData()与当前运行的JSVM环境相关联的数据。 如果未设置任何关联数据,该函数调用将成功,且data设置为NULL。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetLastErrorInfo (JSVM_Env env, const JSVM_ExtendedErrorInfo **result) 检索JSVM_ExtendedErrorInfo结构,其中包含有关发生的最后一个错误的信息。 返回的JSVM_ExtendedErrorInfo的内容仅在对同一env调用JSVM-API函数之前有效。 这包括对OH_JSVM_IsExceptionPending的调用,因此可能经常需要复制信息以便以后使用。 error_message中返回的指针指向一个静态定义的字符串,因此如果你在调用另一个JSVM-API 函数之前将它从error_message字段(将被覆盖)中复制出来,则可以安全地使用该指针。
JSVM_EXTERN JSVM_StatusOH_JSVM_Throw (JSVM_Env env, JSVM_Value error) 抛出提供的JavaScript值。
JSVM_EXTERN JSVM_StatusOH_JSVM_ThrowError (JSVM_Env env, const char *code, const char *msg) 会抛出带有所提供文本的JavaScript Error。
JSVM_EXTERN JSVM_StatusOH_JSVM_ThrowTypeError (JSVM_Env env, const char *code, const char *msg) 会抛出带有所提供文本的JavaScript TypeError。
JSVM_EXTERN JSVM_StatusOH_JSVM_ThrowRangeError (JSVM_Env env, const char *code, const char *msg) 会抛出带有所提供文本的JavaScript RangeError。
JSVM_EXTERN JSVM_StatusOH_JSVM_ThrowSyntaxError (JSVM_Env env, const char *code, const char *msg) 会抛出带有所提供文本的JavaScript SyntaxError。
JSVM_EXTERN JSVM_StatusOH_JSVM_IsError (JSVM_Env env, JSVM_Value value, bool *result) 查询JSVM_Value以检查它是否表示错误对象。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateError (JSVM_Env env, JSVM_Value code, JSVM_Value msg, JSVM_Value *result) 返回带有所提供文本的JavaScript Error。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateTypeError (JSVM_Env env, JSVM_Value code, JSVM_Value msg, JSVM_Value *result) 返回带有所提供文本的JavaScript TypeError。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateRangeError (JSVM_Env env, JSVM_Value code, JSVM_Value msg, JSVM_Value *result) 返回带有所提供文本的JavaScript RangeError。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateSyntaxError (JSVM_Env env, JSVM_Value code, JSVM_Value msg, JSVM_Value *result) 返回带有所提供文本的JavaScript SyntaxError。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetAndClearLastException (JSVM_Env env, JSVM_Value *result) 获取并清除上一次异常。如果出现挂起,则返回JavaScript异常,否则返回NULL。
JSVM_EXTERN JSVM_StatusOH_JSVM_IsExceptionPending (JSVM_Env env, bool *result) 查询上一次异常是否由挂起导致的。如果由异常导致,则返回true,否则返回false。
JSVM_EXTERN JSVM_StatusOH_JSVM_OpenHandleScope (JSVM_Env env, JSVM_HandleScope *result) 开辟了一个新的作用域。
JSVM_EXTERN JSVM_StatusOH_JSVM_CloseHandleScope (JSVM_Env env, JSVM_HandleScope scope) 关闭传入的作用域。必须按照创建作用域的相反顺序关闭作用域。
JSVM_EXTERN JSVM_StatusOH_JSVM_OpenEscapableHandleScope (JSVM_Env env, JSVM_EscapableHandleScope *result) 会打开一个新作用域,从中可以将一个对象提升到外部作用域。
JSVM_EXTERN JSVM_StatusOH_JSVM_CloseEscapableHandleScope (JSVM_Env env, JSVM_EscapableHandleScope scope) 关闭传入的作用域。必须按照创建作用域的相反顺序关闭作用域。 即使存在挂起的JavaScript异常,也可以调用此JSVM_API。
JSVM_EXTERN JSVM_StatusOH_JSVM_EscapeHandle (JSVM_Env env, JSVM_EscapableHandleScope scope, JSVM_Value escapee, JSVM_Value *result) 提升JavaScript对象的句柄,使其在外部作用域的生命周期内有效。 每个作用域只能调用一次。如果多次调用,将返回错误。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateReference (JSVM_Env env, JSVM_Value value, uint32_t initialRefcount, JSVM_Ref *result) 对传入的值创建一个具有指定引用计数的新引用。
JSVM_EXTERN JSVM_StatusOH_JSVM_DeleteReference (JSVM_Env env, JSVM_Ref ref) 删除传入的引用。
JSVM_EXTERN JSVM_StatusOH_JSVM_ReferenceRef (JSVM_Env env, JSVM_Ref ref, uint32_t *result) 增加传入引用的引用计数并返回生成的引用计数。
JSVM_EXTERN JSVM_StatusOH_JSVM_ReferenceUnref (JSVM_Env env, JSVM_Ref ref, uint32_t *result) 递减传入引用的引用计数并返回生成的引用计数。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetReferenceValue (JSVM_Env env, JSVM_Ref ref, JSVM_Value *result) 如果仍然有效,此JSVM-API将返回JSVM_Value, 表示与JSVM_Ref关联的JavaScript值。否则,结果将为NULL。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateArray (JSVM_Env env, JSVM_Value *result) 返回对应于JavaScript Array类型的JSVM-API值。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateArrayWithLength (JSVM_Env env, size_t length, JSVM_Value *result) 返回对应于JavaScript Array类型的JSVM-API值。Array 的长度属性设置为传入的长度参数。但是,不保证底层缓冲区在创建 数组时由VM预先分配。该行为留给底层VM实现。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateArraybuffer (JSVM_Env env, size_t byteLength, void **data, JSVM_Value *result) 返回JavaScript ArrayBuffer类型对应的JSVM-API值。ArrayBuffer用于 表示固定长度的二进制数据缓冲区。通常用作TypedArray对象的后备缓冲区。 分配的ArrayBuffer有一个底层字节缓冲区,其大小由传入的length参数决定。 底层缓冲区可选择返回给调用方,调用方可直接操作该缓冲区。 此缓冲区只能直接从native代码写入。如果想从JavaScript写入该缓冲区, 需创建TypedArray或DataView对象。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateDate (JSVM_Env env, double time, JSVM_Value *result) 分配一个JavaScript Date对象。此API不处理闰秒。 这是因为ECMAScript遵循POSIX时间规范,对闰秒进行忽略。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateExternal (JSVM_Env env, void *data, JSVM_Finalize finalizeCb, void *finalizeHint, JSVM_Value *result) 分配一个带有外部数据的JavaScript值。这用于通过JavaScript代码传递外部数据。 后续可以使用OH_JSVM_GetValueExternal由native代码检索。 该API添加了一个JSVM_Finalize回调,当刚刚创建的JavaScript对象被垃圾回收时将调用该回调。 创建的值不是一个对象,因此不支持附加属性。它被认为是一个独特的值类型: 使用外部值调用OH_JSVM_Typeof()会生成JSVM_EXTERNAL。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateObject (JSVM_Env env, JSVM_Value *result) 分配一个默认的JavaScript对象。该函数功能等同于在JavaScript中执行new Object()。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateSymbol (JSVM_Env env, JSVM_Value description, JSVM_Value *result) 从UTF8 编码的C字符串创建JavaScript symbol值。
JSVM_EXTERN JSVM_StatusOH_JSVM_SymbolFor (JSVM_Env env, const char *utf8description, size_t length, JSVM_Value *result) 在全局注册表中搜索具有给定描述的现有符号。如果该 符号已经存在,它将被返回,否则将在注册表中创建一个新符号。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateTypedarray (JSVM_Env env, JSVM_TypedarrayType type, size_t length, JSVM_Value arraybuffer, size_t byteOffset, JSVM_Value *result) 基于已有的ArrayBuffer对象,创建一个JavaScript TypedArray对象。TypedArray 对象在底层数据缓冲区上提供了一个类似数组的视图,其中每个元素都具有 相同的底层二进制标量数据类型。要求:(length* 元素大小)+ byteOffset 小于等于传入的数组的大小(以字节为单位)。否则,将抛出范围错误(RangeError)。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateDataview (JSVM_Env env, size_t length, JSVM_Value arraybuffer, size_t byteOffset, JSVM_Value *result) 基于已有的ArrayBuffer对象,创建一个JavaScript DataView对象。DataView 对象在底层数据缓冲区上提供了一个类似数组的视图,其中的元素可以具有不同的大小和类型。 要求:二进制的length + byteOffset 小于或等于传入的数组的大小(以字节为单位)。否则,将抛出范围错误(RangeError)。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateInt32 (JSVM_Env env, int32_t value, JSVM_Value *result) 将C int32_t类型的值转换为JavaScript number类型。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateUint32 (JSVM_Env env, uint32_t value, JSVM_Value *result) 将C uint32_t类型的值转换为JavaScript number类型。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateInt64 (JSVM_Env env, int64_t value, JSVM_Value *result) 将C int64_t类型的值转换为JavaScript number类型。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateDouble (JSVM_Env env, double value, JSVM_Value *result) 将C double类型的值转换为JavaScript number类型。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateBigintInt64 (JSVM_Env env, int64_t value, JSVM_Value *result) 将C int64_t类型的值转换为JavaScript BigInt类型。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateBigintUint64 (JSVM_Env env, uint64_t value, JSVM_Value *result) 将C uint64_t类型的值转换为JavaScript BigInt类型。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateBigintWords (JSVM_Env env, int signBit, size_t wordCount, const uint64_t *words, JSVM_Value *result) 将一组无符号64位字转换为单个BigInt值。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateStringLatin1 (JSVM_Env env, const char *str, size_t length, JSVM_Value *result) 将采用ISO-8859-1编码的C字符串转换为JavaScript string值。 复制原生字符串。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateStringUtf16 (JSVM_Env env, const char16_t *str, size_t length, JSVM_Value *result) 将采用UTF16-LE编码的C字符串转换为JavaScript字符串值。 复制原生字符串。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateStringUtf8 (JSVM_Env env, const char *str, size_t length, JSVM_Value *result) 从UTF8编码的C字符串创建JavaScript string值。 复制原生字符串。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetArrayLength (JSVM_Env env, JSVM_Value value, uint32_t *result) 返回数组的长度。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetArraybufferInfo (JSVM_Env env, JSVM_Value arraybuffer, void **data, size_t *byteLength) 用于检索ArrayBuffer的底层数据缓冲区及其长度。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetPrototype (JSVM_Env env, JSVM_Value object, JSVM_Value *result) 返回对象的原型。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetTypedarrayInfo (JSVM_Env env, JSVM_Value typedarray, JSVM_TypedarrayType *type, size_t *length, void **data, JSVM_Value *arraybuffer, size_t *byteOffset) 返回类型化数组的各种属性。如果不需要该属性,则任何输出参数都可以是 NULL。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetDataviewInfo (JSVM_Env env, JSVM_Value dataview, size_t *bytelength, void **data, JSVM_Value *arraybuffer, size_t *byteOffset) 返回DataView的各种属性。 如果不需要某一属性,则任何出参都可以设置为NULL。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetDateValue (JSVM_Env env, JSVM_Value value, double *result) 返回给定JavaScript Date的时间值的C双精度基础类型。如果调用成功,返回JSVM_OK。 如果传入一个非JavaScript Date类型的JSVM_Value,返回JSVM_DATA_EXPECTED。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueBool (JSVM_Env env, JSVM_Value value, bool *result) 返回给定JavaScript Boolean的C布尔基础类型等价值。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueDouble (JSVM_Env env, JSVM_Value value, double *result) 返回给定JavaScript number的C双精度基础类型等价值。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueBigintInt64 (JSVM_Env env, JSVM_Value value, int64_t *result, bool *lossless) 返回给定JavaScript BigInt的C int64_t基础类型等价值。 如果需要,它将截断该值,将lossless设置为false。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueBigintUint64 (JSVM_Env env, JSVM_Value value, uint64_t *result, bool *lossless) 返回给定JavaScript BigInt的C uint64_t基础类型等价值。 如果需要,它将截断该值,将lossless设置为false。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueBigintWords (JSVM_Env env, JSVM_Value value, int *signBit, size_t *wordCount, uint64_t *words) 将单个BigInt值转换为符号位、64位小端数组和数组中的元素数。 signBit和words参数可以都设置为NULL。这种情况下,只获取wordCount。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueExternal (JSVM_Env env, JSVM_Value value, void **result) 检索之前传递给OH_JSVM_CreateExternal()的外部数据指针。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueInt32 (JSVM_Env env, JSVM_Value value, int32_t *result) 返回给定JavaScript number的C int32基础类型等价值。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueInt64 (JSVM_Env env, JSVM_Value value, int64_t *result) 返回给定JavaScript number的C int64基础类型等价值。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueStringLatin1 (JSVM_Env env, JSVM_Value value, char *buf, size_t bufsize, size_t *result) 返回对应于传入值的ISO-8859-1编码字符串
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueStringUtf8 (JSVM_Env env, JSVM_Value value, char *buf, size_t bufsize, size_t *result) 返回对应于传入值的UTF8编码字符串。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueStringUtf16 (JSVM_Env env, JSVM_Value value, char16_t *buf, size_t bufsize, size_t *result) 基于传入的值,查询对应的采用UTF16编码的字符串。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetValueUint32 (JSVM_Env env, JSVM_Value value, uint32_t *result) 返回给定JavaScript number的C uint_32基础类型等价值。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetBoolean (JSVM_Env env, bool value, JSVM_Value *result) 返回用于表示给定布尔值的JavaScript单例对象。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetGlobal (JSVM_Env env, JSVM_Value *result) 返回global对象。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetNull (JSVM_Env env, JSVM_Value *result) 返回null对象。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetUndefined (JSVM_Env env, JSVM_Value *result) 返回Undefined对象。
JSVM_EXTERN JSVM_StatusOH_JSVM_CoerceToBool (JSVM_Env env, JSVM_Value value, JSVM_Value *result) 实现抽象操作ToBoolean()。
JSVM_EXTERN JSVM_StatusOH_JSVM_CoerceToNumber (JSVM_Env env, JSVM_Value value, JSVM_Value *result) 实现抽象操作ToNumber()。 如果传入的值是对象,则函数可能会运行JavaScript代码。
JSVM_EXTERN JSVM_StatusOH_JSVM_CoerceToObject (JSVM_Env env, JSVM_Value value, JSVM_Value *result) 实现抽象操作ToObject()。
JSVM_EXTERN JSVM_StatusOH_JSVM_CoerceToString (JSVM_Env env, JSVM_Value value, JSVM_Value *result) 实现抽象操作ToString()。 如果传入的值是对象,则函数可能会运行JavaScript代码。
JSVM_EXTERN JSVM_StatusOH_JSVM_Typeof (JSVM_Env env, JSVM_Value value, JSVM_ValueType *result) 提供类似于在定义的对象上调用typeof运算符的行为。 不同点在于,该函数支持检测外部值;它将null检测为单独的类型, 而ECMAScript typeof将用于检测object。如果value的类型无效,则返回错误。
JSVM_EXTERN JSVM_StatusOH_JSVM_Instanceof (JSVM_Env env, JSVM_Value object, JSVM_Value constructor, bool *result) 提供类似于在对象上调用instanceof运算符的行为。
JSVM_EXTERN JSVM_StatusOH_JSVM_IsArray (JSVM_Env env, JSVM_Value value, bool *result) 提供类似于在对象上调用IsArray的行为。
JSVM_EXTERN JSVM_StatusOH_JSVM_IsArraybuffer (JSVM_Env env, JSVM_Value value, bool *result) 检查传入的对象是否为ArrayBuffer。
JSVM_EXTERN JSVM_StatusOH_JSVM_IsDate (JSVM_Env env, JSVM_Value value, bool *isDate) 检查传入的Object是否为日期。
JSVM_EXTERN JSVM_StatusOH_JSVM_IsTypedarray (JSVM_Env env, JSVM_Value value, bool *result) 检查传入的Object是否为类型化数组。
JSVM_EXTERN JSVM_StatusOH_JSVM_IsDataview (JSVM_Env env, JSVM_Value value, bool *result) 检查传入的对象是否是DataView。
JSVM_EXTERN JSVM_StatusOH_JSVM_StrictEquals (JSVM_Env env, JSVM_Value lhs, JSVM_Value rhs, bool *result) 提供类似调用严格相等算法的行为。
JSVM_EXTERN JSVM_StatusOH_JSVM_DetachArraybuffer (JSVM_Env env, JSVM_Value arraybuffer) 提供类似于调用ArrayBuffer detach操作的行为。
JSVM_EXTERN JSVM_StatusOH_JSVM_IsDetachedArraybuffer (JSVM_Env env, JSVM_Value value, bool *result) 提供类似调用ArrayBuffer IsDetachedBuffer操作的行为。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetPropertyNames (JSVM_Env env, JSVM_Value object, JSVM_Value *result) 以字符数数组的形式返回object的可枚举属性的名称。 key为符号的object的属性将不会被包含在内。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetAllPropertyNames (JSVM_Env env, JSVM_Value object, JSVM_KeyCollectionMode keyMode, JSVM_KeyFilter keyFilter, JSVM_KeyConversion keyConversion, JSVM_Value *result) 返回一个数组,其中包含此对象的可用属性的名称。
JSVM_EXTERN JSVM_StatusOH_JSVM_SetProperty (JSVM_Env env, JSVM_Value object, JSVM_Value key, JSVM_Value value) 为传入的object设置一个属性。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetProperty (JSVM_Env env, JSVM_Value object, JSVM_Value key, JSVM_Value *result) 从传入的object中获取请求的属性。
JSVM_EXTERN JSVM_StatusOH_JSVM_HasProperty (JSVM_Env env, JSVM_Value object, JSVM_Value key, bool *result) 检查传入的Object是否具有指定命名的属性。
JSVM_EXTERN JSVM_StatusOH_JSVM_DeleteProperty (JSVM_Env env, JSVM_Value object, JSVM_Value key, bool *result) 尝试从object中删除key自己的属性。
JSVM_EXTERN JSVM_StatusOH_JSVM_HasOwnProperty (JSVM_Env env, JSVM_Value object, JSVM_Value key, bool *result) 检查传入的Object是否具有命名的自己的属性。key必须是string或symbol, 否则将抛出错误。JSVM-API不会执行任何数据类型之间的转换。
JSVM_EXTERN JSVM_StatusOH_JSVM_SetNamedProperty (JSVM_Env env, JSVM_Value object, const char *utf8name, JSVM_Value value) 此方法等效于调用OH_JSVM_SetProperty, 其中,通过utf8Name传入的字符串用于创建JSVM_Value。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetNamedProperty (JSVM_Env env, JSVM_Value object, const char *utf8name, JSVM_Value *result) 此方法等效于调用OH_JSVM_GetProperty, 其中,通过utf8Name传入的字符串用于创建JSVM_Value。
JSVM_EXTERN JSVM_StatusOH_JSVM_HasNamedProperty (JSVM_Env env, JSVM_Value object, const char *utf8name, bool *result) 此方法等效于使用从作为utf8Name传入的字符串创建的JSVM_Value 调用OH_JSVM_HasProperty。
JSVM_EXTERN JSVM_StatusOH_JSVM_SetElement (JSVM_Env env, JSVM_Value object, uint32_t index, JSVM_Value value) 在传入的Object上设置一个元素。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetElement (JSVM_Env env, JSVM_Value object, uint32_t index, JSVM_Value *result) 获取请求索引处的元素。
JSVM_EXTERN JSVM_StatusOH_JSVM_HasElement (JSVM_Env env, JSVM_Value object, uint32_t index, bool *result) 如果传入的Object在指定的索引处有一个元素,则此JSVM-API返回true。
JSVM_EXTERN JSVM_StatusOH_JSVM_DeleteElement (JSVM_Env env, JSVM_Value object, uint32_t index, bool *result) 尝试从object中删除指定index处的元素。
JSVM_EXTERN JSVM_StatusOH_JSVM_DefineProperties (JSVM_Env env, JSVM_Value object, size_t propertyCount, const JSVM_PropertyDescriptor *properties) 通过此方法可以在给定对象上高效定义多个属性, 这些属性使用属性描述符进行定义。通过一个属性描述符的数组, 此API将为对象依次设置数组中的属性。
JSVM_EXTERN JSVM_StatusOH_JSVM_ObjectFreeze (JSVM_Env env, JSVM_Value object) 冻结指定的对象。这样可以防止为其添加新的属性、删除现有属性、更改现有属性的 可枚举性、可配置性或可写性、或者更改现有属性的值。它还可以防止改变对象的原型。
JSVM_EXTERN JSVM_StatusOH_JSVM_ObjectSeal (JSVM_Env env, JSVM_Value object) 封装指定的对象。这样可以防止为其添加新的属性并且将所有现有属性标记为不可配置。
JSVM_EXTERN JSVM_StatusOH_JSVM_CallFunction (JSVM_Env env, JSVM_Value recv, JSVM_Value func, size_t argc, const JSVM_Value *argv, JSVM_Value *result) 支持从native代码调用JavaScript函数对象, 这是从native代码回调到JavaScript的主要机制。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateFunction (JSVM_Env env, const char *utf8name, size_t length, JSVM_Callback cb, JSVM_Value *result) 支持在native代码中创建函数对象,这是从JavaScript调用native代码的主要机制。 在此调用之后,新创建的函数在脚本中不再自动可见。相反,必须在JavaScript可见的任何对象上显示设置属性, 才能从脚本访问该函数。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetCbInfo (JSVM_Env env, JSVM_CallbackInfo cbinfo, size_t *argc, JSVM_Value *argv, JSVM_Value *thisArg, void **data) 此方法在回调函数中用于检索有关调用的详细信息, 例如来自给定回调信息的参数和this指针。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetNewTarget (JSVM_Env env, JSVM_CallbackInfo cbinfo, JSVM_Value *result) 返回构造函数调用的new target。 如果当前回调不是构造函数调用,结果为NULL。
JSVM_EXTERN JSVM_StatusOH_JSVM_NewInstance (JSVM_Env env, JSVM_Value constructor, size_t argc, const JSVM_Value *argv, JSVM_Value *result) 使用给定的JSVM_Value表示的构造函数来实例化新的JavaScript值。
JSVM_EXTERN JSVM_StatusOH_JSVM_DefineClass (JSVM_Env env, const char *utf8name, size_t length, JSVM_Callback constructor, size_t propertyCount, const JSVM_PropertyDescriptor *properties, JSVM_Value *result) 定义一个JavaScript类。
JSVM_EXTERN JSVM_StatusOH_JSVM_Wrap (JSVM_Env env, JSVM_Value jsObject, void *nativeObject, JSVM_Finalize finalizeCb, void *finalizeHint, JSVM_Ref *result) 在JavaScript对象中封装native实例。native实例 后续可以通过OH_JSVM_Unwrap()进行检索。
JSVM_EXTERN JSVM_StatusOH_JSVM_Unwrap (JSVM_Env env, JSVM_Value jsObject, void **result) 当JavaScript代码调用类的方法或属性访问器时,对应的JSVM_Callback将被调用。 如果回调是针对实例方法或访问器的,则回调的this参数是封装器对象;然后可以通过调用 封装器对象的OH_JSVM_Unwrap()获得作为调用目标的C++实例。
JSVM_EXTERN JSVM_StatusOH_JSVM_RemoveWrap (JSVM_Env env, JSVM_Value jsObject, void **result) 使用OH_JSVM_Wrap()检索先前封装在JavaScript对象js_object中的native实例并移除封装。 如果finalize回调与封装相关联,则当JavaScript对象被垃圾回收时将不再调用它。
JSVM_EXTERN JSVM_StatusOH_JSVM_TypeTagObject (JSVM_Env env, JSVM_Value value, const JSVM_TypeTag *typeTag) 将typeTag指针的值与JavaScript对象或外部值相关联。可调用OH_JSVM_CheckObjectTypeTag() 判断附加在对象上的标记类型,以确保对象的类型正确。如果对象已经有关联的类型标记,则返回JSVM_INVALID_ARG。
JSVM_EXTERN JSVM_StatusOH_JSVM_CheckObjectTypeTag (JSVM_Env env, JSVM_Value value, const JSVM_TypeTag *typeTag, bool *result) 将类型标签typeTag与JavaScript对象或外部值上的标签作对比。如果找到相同标签, 设置result为true,否则为false。
JSVM_EXTERN JSVM_StatusOH_JSVM_AddFinalizer (JSVM_Env env, JSVM_Value jsObject, void *finalizeData, JSVM_Finalize finalizeCb, void *finalizeHint, JSVM_Ref *result) 为JavaScript对象添加JSVM_Finalize回调,当JavaScript对象被垃圾回收时调用该回调函数。 可以在单个JavaScript对象上多次调用OH_JSVM_AddFinalizer。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetVersion (JSVM_Env env, uint32_t *result) 返回JSVM运行时支持的最高JSVM-API版本。 后续将新增JSVM-API,以便支持更多的功能。引入该API的目的:在支持某功能的JSVM版本, 可以使用新的功能;在不支持某功能的JSVM版本,可以提供回调行为。
JSVM_EXTERN JSVM_StatusOH_JSVM_GetVMInfo (JSVM_VMInfo *result) 返回虚拟机的信息。
JSVM_EXTERN JSVM_StatusOH_JSVM_AdjustExternalMemory (JSVM_Env env, int64_t changeInBytes, int64_t *result) 此函数将因JavaScript对象而保持活跃的外部分配的内存大小通知给底层虚拟机。 注册外部分配的内存将比其他方式更频繁地触发全局垃圾回收。
JSVM_EXTERN JSVM_StatusOH_JSVM_MemoryPressureNotification (JSVM_Env env, JSVM_MemoryPressureLevel level) 通知虚拟机系统内存不足并有选择地触发垃圾回收。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreatePromise (JSVM_Env env, JSVM_Deferred *deferred, JSVM_Value *promise) 创建一个延迟对象和一个JavaScript promise。
JSVM_EXTERN JSVM_StatusOH_JSVM_ResolveDeferred (JSVM_Env env, JSVM_Deferred deferred, JSVM_Value resolution) 通过与之关联的延迟对象来解析JavaScript promise。 它只能用于解析对应的可用的延迟对象的JavaScript Promise。 这意味着Promise必须使用OH_JSVM_CreatePromise()创建,并且 从该调用返回的对象必须保留,才能将其传递给此API。
JSVM_EXTERN JSVM_StatusOH_JSVM_RejectDeferred (JSVM_Env env, JSVM_Deferred deferred, JSVM_Value rejection) 通过与之关联的延迟对象来拒绝JavaScript Promise。 它只能用于拒绝对应的可用延迟对象的JavaScript Promise。 这意味着Promise必须使用OH_JSVM_CreatePromise()创建,并且 从该调用返回的对象必须保留,才能将其传递给此API。
JSVM_EXTERN JSVM_StatusOH_JSVM_IsPromise (JSVM_Env env, JSVM_Value value, bool *isPromise) 查询Promise是否为原生Promise对象。
JSVM_EXTERN JSVM_StatusOH_JSVM_JsonParse (JSVM_Env env, JSVM_Value jsonString, JSVM_Value *result) 解析JSON字符串,并返回成功解析的值。
JSVM_EXTERN JSVM_StatusOH_JSVM_JsonStringify (JSVM_Env env, JSVM_Value jsonObject, JSVM_Value *result) 将对象字符串化,并返回成功转换后的字符串。
JSVM_EXTERN JSVM_StatusOH_JSVM_CreateSnapshot (JSVM_VM vm, size_t contextCount, const JSVM_Env *contexts, const char **blobData, size_t *blobSize) 创建虚拟机的启动快照。