我已经将代码从Nan修改为Napi(C++插件(。此代码使用ObjectWrap类。在使用Nan之前,当我试图获得节点插件返回的对象的属性时,它是有效的。
console.log(Object.keys(result));
[ 'bool', 'string', 'int', 'float', 'vtype' ]
现在,使用Napi,当我尝试相同的命令时,我会得到:
[]
但对房产的访问仍在继续:
console.log(result.bool);
false
我的初始化代码:
Napi::Object JSVariant::Init(Napi::Env env, Napi::Object exports)
{
Napi::HandleScope scope(env);
Napi::Function ctor = DefineClass(env, "JSVariant", {InstanceAccessor("vtype", &JSVariant::GetVTypeValue, &JSVariant::SetVTypeValue), InstanceAccessor("float", &JSVariant::GetFltValue, &JSVariant::SetFltValue), InstanceAccessor("int", &JSVariant::GetIntValue, &JSVariant::SetIntValue), InstanceAccessor("string", &JSVariant::GetStringValue, &JSVariant::SetStringValue), InstanceAccessor("bool", &JSVariant::GetBoolValue, &JSVariant::SetBoolValue)});
constructor = Napi::Persistent(ctor);
constructor.SuppressDestruct();
exports.Set("JSVariant", ctor);
return exports;
}
有没有办法用纳皮得到楠的结果?
我不知道你原来的Nan代码看起来怎么样,但
Object.keys
无法使用prototype
对象中的属性,这正是您正在执行的操作InstanceAccessor
有一个可选的第四个参数,它采用napi_propety_attributes
值,您必须将其设置为napi_enumerable
才能使属性可见,但只有在Object.keys(Object.getPrototypeOf(obj))
中才会如此