插件可从 C++ 函数中创建并返回新的对象,如以下例子所示。 一个带有 msg 属性的对象被创建并返回,该属性会输出传入 createObject() 的字符串:

    1. // addon.cc
    2. #include <node.h>
    3. namespace demo {
    4. using v8::Context;
    5. using v8::FunctionCallbackInfo;
    6. using v8::Isolate;
    7. using v8::Local;
    8. using v8::Object;
    9. using v8::String;
    10. using v8::Value;
    11. void CreateObject(const FunctionCallbackInfo<Value>& args) {
    12. Isolate* isolate = args.GetIsolate();
    13. Local<Context> context = isolate->GetCurrentContext();
    14. Local<Object> obj = Object::New(isolate);
    15. obj->Set(context,
    16. String::NewFromUtf8(isolate,
    17. "msg").ToLocalChecked(),
    18. args[0]->ToString(context).ToLocalChecked())
    19. .FromJust();
    20. args.GetReturnValue().Set(obj);
    21. }
    22. void Init(Local<Object> exports, Local<Object> module) {
    23. NODE_SET_METHOD(module, "exports", CreateObject);
    24. }
    25. NODE_MODULE(NODE_GYP_MODULE_NAME, Init)
    26. } // namespace demo

    在 JavaScript 中测试它:

    1. // test.js
    2. const addon = require('./build/Release/addon');
    3. const obj1 = addon('hello');
    4. const obj2 = addon('world');
    5. console.log(obj1.msg, obj2.msg);
    6. // 打印: 'hello world'