2017-10-17 101 views
0

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

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); 

回答

0

我必须做到以下几点:

  1. 得到持续可变
  2. 函数模板与模板获取功能
  3. 在构造函数上调用NewInstance()使用isolate->GetCurrentContext()从我的函数调用
  4. 在上使用返回

然后我可以包装对象并返回它。

// 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);