首页 > 解决方案 > 如何在节点插件中创建吸气剂?

问题描述

我一直在编写节点插件,但我似乎无法弄清楚如何将属性添加到类中。我一直在做的是在c++插件中创建一个方法,并在其中javascript创建一个调用插件中函数的getter。

这是执行此操作的正确方法,还是可以在c++附加组件中创建此属性?

c++我这样做:

void MyAddon::Init(Local<Object> exports, Local<Object> module) {

  // Prepare constructor template
  Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, New);
  tpl->SetClassName(String::NewFromUtf8(isolate, "MyAddon"));
  tpl->InstanceTemplate()->SetInternalFieldCount(1);

  // Add the property
  NODE_SET_PROTOTYPE_METHOD(tpl, "currWidth", Width);


  // Export the class
  constructor.Reset(isolate, tpl->GetFunction());
  exports->Set(
      String::NewFromUtf8(isolate, "MyAddon"), tpl->GetFunction());
}

然后在JavaScript我这样做:

const MyAddon = require('./build/Release/MyAddon')

module.exports.Addon = class Addon extends MyAddon.MyAddon {
  get width() { return this.currWidth() }
}

这似乎不是将属性添加到附加组件的正确方法。网站上的示例使用NODE_SET_METHOD,所以我尝试了但它没有运行该方法。我也没有收到任何错误。该方法只是不运行...

在那里的例子中,他们没有尝试将它设置在一个类上,这是我想要做的,所以我的有点不同:

NODE_SET_METHOD((Local<Template>)tpl, "height", Height);

如何在 中创建此属性c++

标签: javascriptc++node.jsnode.js-addon

解决方案


在该Init方法中,就像添加以下行一样简单:

tpl->InstanceTemplate()->SetAccessor(String::NewFromUtf8(isolate, "width"), Width);

并创建一个如下所示的方法:

void MyAddon::Width(Local<String> property, const PropertyCallbackInfo<Value> &args) {}

推荐阅读