函数工厂


\Function factory

另一个常见的场景是创建封装 C++ 函数并将它们返回给 JavaScript 的 JavaScript 函数:

\Another common scenario is creating JavaScript functions that wrap C++ functions and returning those back to JavaScript:

// addon.cc
#include <node.h>
namespace demo {
using v8::Context;
using v8::Function;
using v8::FunctionCallbackInfo;
using v8::FunctionTemplate;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value;
void MyFunction(const FunctionCallbackInfo<Value>& args) {
 Isolate* isolate = args.GetIsolate();
 args.GetReturnValue().Set(String::NewFromUtf8(
 isolate, "hello world").ToLocalChecked());
}
void CreateFunction(const FunctionCallbackInfo<Value>& args) {
 Isolate* isolate = args.GetIsolate();
 Local<Context> context = isolate->GetCurrentContext();
 Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, MyFunction);
 Local<Function> fn = tpl->GetFunction(context).ToLocalChecked();
 // omit this to make it anonymous
 fn->SetName(String::NewFromUtf8(
 isolate, "theFunction").ToLocalChecked());
 args.GetReturnValue().Set(fn);
}
void Init(Local<Object> exports, Local<Object> module) {
 NODE_SET_METHOD(module, "exports", CreateFunction);
}
NODE_MODULE(NODE_GYP_MODULE_NAME, Init)
} // namespace demo 

去测试:

\To test:

// test.js
const addon = require('./build/Release/addon');
const fn = addon();
console.log(fn());
// Prints: 'hello world' 

AltStyle によって変換されたページ (->オリジナル) /