侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论

NAPI 笔记 04:Object extends from Value

barwe
2022-08-29 / 0 评论 / 1 点赞 / 1,081 阅读 / 1,909 字
温馨提示:
本文最后更新于 2023-06-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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

1

评论区