在C ++中创建javascript包装对象的数组

时间:2017-10-17 10:02:44

标签: node.js v8

我正在使用NAN和ObjectWrap并希望创建一个包装对象列表并从静态函数返回它。我正在做的是使用一个类来表示一个窗口并枚举Windows 10中的顶级窗口。这就是我在Javascript中创建一个对象的新方法(它调用默认的MWindowMapper构造函数,调用默认的MWindow)使用前台窗口的构造函数):

static NAN_METHOD(NewMethod) {
    MWindowWrapper* obj = new MWindowWrapper();
    obj->Wrap(info.This());
    info.GetReturnValue().Set(info.This());
}

那么我可以用什么来代替info.This()来使用我的MWindowWrapper类创建一个新的包装对象?我的MWindowWrapper课程的开头是这样的:

static Nan::Persistent<FunctionTemplate> constructor;

class MWindowWrapper : public Nan::ObjectWrap {
public:
    static NAN_MODULE_INIT(Init) {
        Local<FunctionTemplate> tpl = New<FunctionTemplate>(MWindowWrapper::NewMethod);
        constructor.Reset(tpl);

1 个答案:

答案 0 :(得分:1)

我必须做以下事情:

  1. 从持久变量中获取函数模板
  2. 从模板中获取功能
  3. 使用我的函数调用中的NewInstance()在构造函数上调用isolate->GetCurrentContext()
  4. ToLocalChecked()返回的
  5. 上使用MaybeLocal<Object>

    然后我可以包裹对象并将其返回。

    // get FunctionTemplate from persistent object
    Local<FunctionTemplate> tpl = Nan::New(constructorTemplate);
    
    // get function from template
    Local<Function> cons = tpl->GetFunction();
    
    // create new instance in the current context
    v8::MaybeLocal<Object> instance = cons->NewInstance(
        isolate->GetCurrentContext(), 0, nullptr);
    
    // use as Local<Object>
    Local<Object> obj = instance.ToLocalChecked();
    
    // now wrap object and return
    MWindowWrapper* w = new MWindowWrapper();
    w->Wrap(obj);
    info.GetReturnValue().Set(obj);