引言
我们接入 QuickJS 引擎主要目的是为了给我们的应用增加支持 JS 的能力。而 JS 的能力构成则离不开引擎提供的各种 API 的支持,本文将主要介绍几种常见的 API 使用方式。
相关文章
API 浅析
QuickJS 引擎提供的 API 主要定义在 quickjs.h 中,下面我们结合源码中 example point.c 的代码进行逐个讲解。
首先解释下 example 中的 point.c 是定义了一个 module ,在这里我们通过命令编译 point.c 之后再次执行我们的 JavaScript 脚本时导入这个模块就可以用到这个模块能力。
下面将带着问题去看看我们如何使用 QuickJS 提供的 API 去解决,问题是递进提出,解决问题时需要用到的 API 也会越来越多。
一:如何在 C/C++ 代码中执行一个脚本
试想以下这么一个场景,我要用 QuickJS 引擎执行一段脚本,那么标准流程应该是怎样的呢?
首先要了解在 QuickJS 引擎的定义中,每个 JS 脚本的执行都离不开其运行时环境 JSRuntime ,因此为了执行这个脚本我们需要创建一个 JSRuntime 为后续执行脚本提供环境。
JSRuntime *rt = JS_NewRuntime();
提供环境后还无法执行脚本,要想执行脚本还需要根据 JSRuntime 去构建出脚本需要执行的 JSContext ,这个才是每个脚本最终得以运行的最终环境,同时每个 JSContext 都有一个运行时环境,在这个 JSContext 中我们可以为每个脚本定制不同的扩展等。
JSContext *ctx = JS_NewContext(rt);
准备好 JSContext 后就可以执行脚本了,此时不同于前一篇文章所使用的 JS_EvalFunction 在这里我们要使用 JS_Eval 方法去执行我们的脚本。这两者的区别后面在解答