侧边栏壁纸
博主头像
我的学习心得 博主等级

行动起来,活在当下

  • 累计撰写 223 篇文章
  • 累计创建 60 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

NAPI 笔记 07:PropertyDescriptor

Administrator
2022-08-30 / 0 评论 / 0 点赞 / 1643 阅读 / 0 字

一个Object对象可以调用其DefineProperty()方法或者DefineProperties()方法设置属性。

这两个方法都接受PropertyDescriptor对象数组作为参数。

class PropertyDescriptor

PropertyDescriptor 类有三个重要的静态方法:Accessor(), Function() & Value()

static method Accessor

创建一个与只读属性、或者可读可写属性绑定的 PropertyDescriptor 对象。

该方法可以手动定义属性的 getter & setter 方式。

Value TestGetter(const CallbackInfo& info) {
    return Boolean::New(info.Env(), xxx);
}

void TestSetter(const CallbackInfo& info) {
    xxx = info[0].As<Boolean>();
}

// 一个只读属性
PropertyDescriptor pd1 = PropertyDescriptor::Accessor<TestGetter>("pd1");

// 一个可读可写属性
PropertyDescriptor pd2 = PropertyDescriptor::Accessor<TestGetter, TestSetter>("pd2");

一个正确的 Getters 函数:

using GetterCallback = Value (*)(const CallbackInfo& info);

一个正确的 Setter 函数:

using SetterCallback = void (*)(const CallbackInfo& info);

static method Function

创建一个与函数属性(属性值是一个函数)绑定的 PropertyDescriptor 对象。

需要先定义一个函数:

using AccessorFunction = T (*)(const CallbackInfo& info);
static PropertyDescriptor PropertyDescriptor::Function(Env env, __string__ name, AccessorFunction cb, ...);

example:

Value TestFunction(const CallbackInfo& info) {
    return Boolean::New(info.Env(), true);
}

PropertyDescriptor pd3 = PropertyDescriptor::Function(env, "pd3", TestFunction);

static method Value

创建一个与可读可写属性绑定的 PropertyDescriptor 对象。

PropertyDescriptor pd4 = PropertyDescriptor::Value("pd4", true);

Object::DefineProperties

上面创建的四个 PropertyDescriptor 对象,每个对象包含了属性的名称和属性绑定的内容。

可以将一个 PropertyDescriptor 对象数组绑定到 Object 对象上:

obj.DefineProperties({pd1, pd2, pd3, pd4});

在 JavaScript 中对象将获得 pd1, pd2, pd3, pd4 这四个属性。

0

评论区