Как создать геттер в дополнении к узлу? - PullRequest
0 голосов
/ 13 сентября 2018

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

0 голосов
/ 13 сентября 2018

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

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

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

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