Node.js C++ Addon: 处理 JavaScript 对象 - Local<Value> 使用示例
Node.js C++ Addon: 处理 JavaScript 对象 - Local 使用示例
本教程将展示如何使用 Node.js C++ Addon 接收 JavaScript 对象,并使用 Local<Value> 获取对象属性值。我们将使用一个示例代码,展示如何从 JavaScript 传入一个包含 'x', 'y', 'type' 属性的对象,并在 C++ 代码中读取并打印这些属性值。
C++ Addon 代码
#include <node.h>
using namespace v8;
void MyFunction(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
// 获取传入的参数
Local<Object> obj = args[0]->ToObject(isolate);
// 获取对象的属性,并打印出来
Local<Value> x_val = obj->Get(String::NewFromUtf8(isolate, 'x'));
double x = x_val->NumberValue();
printf('x = %f\n', x);
Local<Value> y_val = obj->Get(String::NewFromUtf8(isolate, 'y'));
double y = y_val->NumberValue();
printf('y = %f\n', y);
Local<Value> type_val = obj->Get(String::NewFromUtf8(isolate, 'type'));
int type = type_val->Int32Value();
printf('type = %d\n', type);
}
void init(Local<Object> exports) {
NODE_SET_METHOD(exports, 'myFunction', MyFunction);
}
NODE_MODULE(addon, init)
JavaScript 调用代码
const addon = require('./build/Release/addon');
const obj = {
x: 1,
y: 2,
type: 3,
};
addon.myFunction(obj);
运行结果
x = 1.000000
y = 2.000000
type = 3
代码解释
-
C++ 代码:
MyFunction函数接收一个Local<Value>数组作为参数,该数组包含从 JavaScript 传入的参数。- 使用
args[0]->ToObject(isolate)获取传入的 JavaScript 对象。 - 使用
obj->Get(String::NewFromUtf8(isolate, 'x'))获取对象属性 'x' 的值。 - 使用
x_val->NumberValue()将属性值转换为 double 类型。 - 同理获取 'y' 和 'type' 属性的值。
-
JavaScript 代码:
- 使用
require('./build/Release/addon')加载编译好的 C++ Addon。 - 创建一个包含 'x', 'y', 'type' 属性的 JavaScript 对象。
- 使用
addon.myFunction(obj)调用 C++ 中的MyFunction函数。
- 使用
总结
本教程展示了如何使用 Node.js C++ Addon 接收 JavaScript 对象,并使用 Local<Value> 获取对象属性值。这是一种将 JavaScript 代码与 C++ 代码交互的常用方法,可以帮助你扩展 Node.js 的功能并提高性能。
原文地址: https://www.cveoy.top/t/topic/os9o 著作权归作者所有。请勿转载和采集!