Я был в процессе написания надстройки узла, и я не могу понять, как добавить свойство в класс. То, что я делал, это создание метода в c++
дополнение, и в javascript
Я создаю геттер, который вызывает функцию в дополнении.
Это правильный способ сделать это, или это свойство может быть создано в 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) {}
Других решений пока нет …