Как создать геттер в дополнении к узлу?

Я был в процессе написания надстройки узла, и я не могу понять, как добавить свойство в класс. То, что я делал, это создание метода в 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++?

1 ответ

Решение

В Init метод, это было так же просто, как добавить эту строку:

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

И создание метода, который выглядит следующим образом:

void MyAddon::Width(Local<String> property, const PropertyCallbackInfo<Value> &args) {}
Другие вопросы по тегам