在v8中,使用cpp对象作为参数执行js函数

Execute a js function with a cpp object as argument in v8

本文关键字:参数 执行 js 函数 对象 v8 使用 cpp      更新时间:2023-10-16

是否可以在v8中使用cpp对象作为参数来执行js函数?

如果是,那么怎么做?

假设javascript中有一个函数可以遍历节点树。

function traverse_tree(root)    /* root is type of Node */
{
no_of_node++;   /* no_of_node is a global variable in js */
for(var i=0;i<root.children.length;i++)
{
traverse_tree(root.children[i]);
}
}

节点树是用C++创建的;

class Node
{
public:
std::vector<Node*> children;
}

如何在函数调用参数中传递在cpp中创建的树结构的根?

简短回答

不,您不可能从javascript访问实际的C++对象。

  • Webkit桥接的工作原理是使C++对象的方法在特定名称下的javascript中可用
  • 字符串或整数等简单变量可以作为参数传递给这些函数调用
  • 只要是HashMaps(键值对),就可以传递更复杂的对象

这意味着不可能传递引用;份额;对象。

可能的实施

  1. 您可以在C++应用程序中创建一个方法(作为单独的类或Node的一部分),并将该对象公开给javascript。然后,您需要的任何实现(例如搜索特定项)都可以在C++中完成。通过这种方式,您为C++应用程序功能创建了一个javascript API
  2. 如果你真的需要用javascript进行处理,那么你必须想办法把树转换成某种HashMap(这样它作为JSON对象就有意义了),然后把它作为参数返回给javascript