javascript - 如何在节点插件中创建吸气剂?
问题描述
我一直在编写节点插件,但我似乎无法弄清楚如何将属性添加到类中。我一直在做的是在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++
?
解决方案
在该Init
方法中,就像添加以下行一样简单:
tpl->InstanceTemplate()->SetAccessor(String::NewFromUtf8(isolate, "width"), Width);
并创建一个如下所示的方法:
void MyAddon::Width(Local<String> property, const PropertyCallbackInfo<Value> &args) {}
推荐阅读
- javascript - 匹配字符串或行尾的正则表达式
- python - 将时间四舍五入到最接近的小时 pandas 系列
- google-sheets - 使用基于日期的 VLOOKUP 在数组公式中求和
- python - 此示例中的列表或字符串类型
- java - 将属性作为值注入 applicationContext.xml (spring boot 2.2)
- maximo - 1:M 工单对象有哪些不同类型?
- css - 如何在单元格和单元格之间绘制边界线?
- azure - 如果模板中未引用现有密钥,则 ARM 模板会重新生成密钥
- c++ - vim 插件,用于在 C/C++ 中跨预处理器#if、#else、#endif 搜索合法的不平衡括号
- php - Laravel eloquent join 左连接中的多个表