我正在使用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);
答案 0 :(得分:1)
我必须做以下事情:
NewInstance()
在构造函数上调用isolate->GetCurrentContext()
ToLocalChecked()
返回的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);