【发布时间】:2018-09-13 18:45:26
【问题描述】:
我一直在编写节点插件,但我似乎无法弄清楚如何将属性添加到类中。我一直在做的是在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() }
}
这似乎不是向插件添加属性的正确方法。 example on the website 使用NODE_SET_METHOD,所以我尝试了但它没有运行该方法。我也没有收到任何错误。该方法只是没有运行...
在那里的例子中,他们没有尝试将它设置在一个类上,这是我正在尝试做的,所以我的有点不同:
NODE_SET_METHOD((Local<Template>)tpl, "height", Height);
如何在c++ 中创建此属性?
【问题讨论】:
-
关于你的昵称:请远离我的!
-
您应该能够通过使用
v8::ObjectTemplate::SetAccessor提供getter 和setter 回调函数来在访问相应的对象属性时调用。 -
谢谢VTT,你能举个例子吗?
标签: javascript c++ node.js node.js-addon