2

我有以下 JavaScript 基本函数:

function Animal { }  

Animal.prototype.move = function () { 
  //... 
}

我还有一个像这样的派生 JavaScript 函数:

function Dog {
  Dog.super_.call(this);
}

util.inherits(Dog, Animal);

Dog.prototype.bark = function () {
  // ...
}

Dog现在我想创建一个与派生的JavaScript 函数完全相同的 C++ 插件 :

void Dog::Init(Handle<Object> exports, Handle<Object> module) {
  Isolate* isolate = Isolate::GetCurrent();

  Local<Function> require = Local<Function>::Cast(module->Get(
    String::NewFromUtf8(isolate, "require")));

  Local<Value> args[] = {
    String::NewFromUtf8(isolate, "./animal")
  };  

  Local<Value> animalModule = require->Call(module, 1, args);

  Local<Function> animalFunc = Local<Function>::Cast(animalModule);   

  Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, New);
  // tpl->Inherit(animalFunc); // <-- HERE
  tpl->SetClassName(String::NewFromUtf8(isolate, "Dog"));
  tpl->InstanceTemplate()->SetInternalFieldCount(1);  

  NODE_SET_PROTOTYPE_METHOD(tpl, "bark", Bark);

  constructor.Reset(isolate, tpl->GetFunction());
  exports->Set(String::NewFromUtf8(isolate, "Dog"),
    tpl->GetFunction());    
}

如何在函数模板中获取FunctionTemplatefrom animalFunc/animalModule以便能够从它继承?tpl或者也许我应该以某种方式将animalFunc.prototype分配给tpl.prototype

4

1 回答 1

0

唉,你不能。

检查这个讨论:https ://github.com/nodejs/node-addon-api/issues/229

这就是为什么在 C++ 中没有标准的继承 JS 类的方法的主要原因。

于 2022-02-13T19:15:41.143 回答