Object
类直接继承自Value
类。
class Object
https://github.com/nodejs/node-addon-api/blob/main/doc/object.md
Object
类直接继承自Value
类,对应 JavaScript 中的对象。
其子类有:Array
, ArrayBuffer
, Buffer<T>
, Function
, TypedArray
。
获得实例:
// an empty instance
Napi::Object::Object();
// a non-empty instance
Napi::Object::Object(napi_env env, napi_value value);
// an instance same as `{}` in js
Napi::Object Napi::Object::New(napi_env env);
methods
bool Object::Set(key, value) const;
bool Object::Delete(key) const;
bool Object::Get(key) const;
bool Object::Has(key) const;
bool Object::InstanceOf(const Function& constructor) const;
inline method AddFinalizer
在实例被垃圾回收时执行回调函数。
template <typename Finalizer, typename T>
inline void AddFinalizer(Finalizer finalizeCallback, T* data) const;
void finalizeCallback(Napi::Env env, T* data);
template <typename Finalizer, typename T, typename Hint>
inline void AddFinalizer(Finalizer finalizeCallback, T* data, Hint* finalizeHint) const;
void finalizeCallback(Napi::Env env, T* data, Hint* hint);
method GetPropertyNames
将对象的 可迭代属性 作为一个Array
对象返回,Symbol
类型的属性会被忽略。
Array Object::GetPropertyNames() const;
method HasOwnProperty
对象是否直接拥有某个属性。
bool Object::HasOwnProperty(key) const;
method DefineProperty
bool Object::DefineProperty(const PropertyDescriptor& property) const;
method DefineProperties
bool Object::DefineProperties(std::initializer_list<PropertyDescriptor>& properties) const;
bool Object::DefineProperties(std::vector<PropertyDescriptor>& properties) const;
method Freeze
void Object::Freeze() const;
冻存对象:禁止对对象进行任何修改,包括对原型对象的修改。
method Seal
void Object::Seal() const;
封存对象:不能添加新的属性,所有已经存在的属性不能再被配置。
本来就可写的属性仍然可以被修改。
operator []
重载了索引操作符对属性进行访问:
PropertyLValue<std::string> Object::operator[] (const char* utf8name) const;
PropertyLValue<std::string> Object::operator[] (const std::string& utf8name) const;
PropertyLValue<uint32_t> Object::operator[] (uint32_t index) const;
method begin & end
iterator,没具体研究,可参考 https://github.com/nodejs/node-addon-api/blob/main/doc/object.md#iterator
评论区