web编程学习

JavascriptCore:

在 C++ 代码中与 JavaScript 代码进行交互的第一步是能Javascript中基本类型

  • JSStringRef <-> JSStringCreateWithUTF8CString <->
  • JSValueRef <-> JSValueMakeNumber <-> JSValueToNumber
  • Boolean
  • JSObjectRef <-> JSObjectMake <-> JSObjectSetProperty JSObjectGetProperty

Javascript代码内部可能会有交互,例如代码内部可能调用许多函数,例如代码依赖/影响一些全局变量:因此我们在执行与JavaScript相关的操作时都需要指明JavaScript 执行上下文JSContextRef

  • JSContextRef
  • JSGlobalContextRef

过程中可能需要执行代码

  • 执行Javascript代码 JSEvaluateScript

  • 还是不方便,JSObjectCallAsFunction

V8:

const char* script1 = "var i = 0;";
const char* script2 =
    "function a() {"
    "  i++;"
    "}";
  // 执行完后环境中有了i这个变量,初始为0
  JSStringRef scriptString1 = JSStringCreateWithUTF8CString(script1);
  JSEvaluateScript(context, scriptString1, nullptr, nullptr, 0, &exception);
  
  // 执行完后环境中有了a这个函数
  JSStringRef scriptString2 = JSStringCreateWithUTF8CString(script2);
  JSEvaluateScript(context, scriptString2, nullptr, nullptr, 0, &exception);
// 获取变量 i
JSStringRef iName = JSStringCreateWithUTF8CString("i");
JSValueRef iValue = JSObjectGetProperty(context,JSContextGetGlobalObject(context), iName, nullptr);

// 获取函数 a
JSStringRef aName = JSStringCreateWithUTF8CString("a");
JSValueRef aValue =JSObjectGetProperty(context,JSContextGetGlobalObject(context),aName, nullptr);
JSObjectRef aFunction = JSValueToObject(context, aValue, nullptr);
// 测试,结果是3
for (int j = 0; j < 3; ++j) {
    JSObjectCallAsFunction(context, aFunction, nullptr, 0, nullptr, nullptr);
}
JSValueToNumber(context, iValue, nullptr) 

JSEvaluateScript 函数的目的是在给定的 JavaScript 上下文中执行一段 JavaScript 代码

而对于对象的属性应该使用:
JSObjectGetProperty获取 JavaScript 对象的属性值

JSGlobalContextCreate

以下是创建 JavaScript 对象的一些常见用途:

向 JavaScript 代码传递数据:如果您需要将 C++ 代码中的数据传递给 JavaScript 代码进行处理,可以创建一个 JavaScript 对象并将数据作为对象的属性。然后,您可以将此对象传递给 JavaScript 函数或将其添加到 JavaScript 上下文中。

从 JavaScript 代码获取数据:如果您需要从 JavaScript 代码获取数据并在 C++ 代码中处理,可以创建一个 JavaScript 对象,将其作为参数传递给 JavaScript 函数,然后从该对象中读取返回的数据。

调用 JavaScript 函数:如果您需要在 C++ 代码中调用 JavaScript 函数,可以创建一个 JavaScript 对象并将其作为参数传递给 JavaScript 函数。这个对象可以包含函数的参数,以及一个回调函数,该回调函数可以在 JavaScript 代码中调用以将结果传递回 C++ 代码。

创建自定义 JavaScript 类型:如果您需要在 C++ 代码中创建自定义 JavaScript 类型,可以使用 JSObjectMake 创建具有特定属性和方法的对象。这允许您在 JavaScript 代码中使用这些自定义类型,就像使用内置 JavaScript 对象一样。

总之,创建 JavaScript 对象的主要目的是在 C++ 代码和 JavaScript 代码之间建立通信和交互。这使得在 C++ 代码中可以灵活地处理 JavaScript 数据和逻辑,从而实现更丰富的功能和集成。
JSObjectMake是一个JavaScriptCore C API函数,用于在C++代码中创建一个新的JavaScript对象。这个函数的原型如下:

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值