Property Descriptor

A Napi::Object can be assigned properites via its DefineProperty and DefineProperties functions, which take PropertyDescrptor(s) as their parameters. The Napi::PropertyDescriptor can contain either values or functions, which are then assigned to the Napi::Object. Note that a single instance of a Napi::PropertyDescriptor class can only contain either one value, or at most two functions. PropertyDescriptors can only be created through the class methods Accessor, Function, or Value, each of which return a new static instance of a Napi::PropertyDescriptor.

Example

```cpp

include

using namespace Napi;

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

void TestSetter(const CallbackInfo& info) { testValue = info[0].As(); }

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

Void Init(Env env) { // Create an object. Object obj = Object::New(env);

// Accessor PropertyDescriptor pd1 = PropertyDescriptor::Accessor(env, obj, "pd1", TestGetter); PropertyDescriptor pd2 = PropertyDescriptor::Accessor(env, obj, "pd2", TestGetter, TestSetter); // Function PropertyDescriptor pd3 = PropertyDescriptor::Function(env, "function", TestFunction); // Value Boolean true_bool = Boolean::New(env, true); PropertyDescriptor pd4 = PropertyDescriptor::Value("boolean value", Napi::Boolean::New(env, true), napi_writable);

// Assign properties to the object. obj.DefineProperties({pd1, pd2, pd3, pd4}); } ```

Methods

Constructor

cpp Napi::PropertyDescriptor::PropertyDescriptor (napi_property_descriptor desc);

Accessor

cpp static Napi::PropertyDescriptor Napi::PropertyDescriptor::Accessor (___ name, Getter getter, napi_property_attributes attributes = napi_default, void *data = nullptr);

Returns a PropertyDescriptor that contains a function.

The name of the property can be any of the following types: - const char* - const std::string & - napi_value value - Napi::Name

This signature is deprecated. It will result in a memory leak if used.

cpp static Napi::PropertyDescriptor Napi::PropertyDescriptor::Accessor ( Napi::Env env, Napi::Object object, ___ name, Getter getter, napi_property_attributes attributes = napi_default, void *data = nullptr);

Returns a Napi::PropertyDescriptor that contains a Getter accessor.

The name of the property can be any of the following types: - const char* - const std::string & - Napi::Name

cpp static Napi::PropertyDescriptor Napi::PropertyDescriptor::Accessor (___ name, Getter getter, Setter setter, napi_property_attributes attributes = napi_default, void *data = nullptr);

Returns a Napi::PropertyDescriptor that contains a Getter and Setter function.

The name of the property can be any of the following types: - const char* - const std::string & - napi_value value - Napi::Name

This signature is deprecated. It will result in a memory leak if used.

cpp static Napi::PropertyDescriptor Napi::PropertyDescriptor::Accessor ( Napi::Env env, Napi::Object object, ___ name, Getter getter, Setter setter, napi_property_attributes attributes = napi_default, void *data = nullptr);

Returns a Napi::PropertyDescriptor that contains a Getter and Setter function.

The name of the property can be any of the following types: - const char* - const std::string & - Napi::Name

Function

cpp static Napi::PropertyDescriptor Napi::PropertyDescriptor::Function (___ name, Callable cb, napi_property_attributes attributes = napi_default, void *data = nullptr);

Returns a Napi::PropertyDescriptor that contains a callable Napi::Function.

The name of the property can be any of the following types: - const char* - const std::string & - napi_value value - Napi::Name

This signature is deprecated. It will result in a memory leak if used.

cpp static Napi::PropertyDescriptor Napi::PropertyDescriptor::Function ( Napi::Env env, ___ name, Callable cb, napi_property_attributes attributes = napi_default, void *data = nullptr);

Returns a Napi::PropertyDescriptor that contains a callable Napi::Function.

The name of the property can be any of the following types: - const char* - const std::string & - Napi::Name

Value

cpp static Napi::PropertyDescriptor Napi::PropertyDescriptor::Value (___ name, napi_value value, napi_property_attributes attributes = napi_default);

The name of the property can be any of the following types: - const char* - const std::string & - napi_value value - Napi::Name

Related Information

napi_property_attributes

napi_property_attributes are flags used to indicate to JavaScript certain permissions that the property is meant to have. The following are the flag options: - napi_default, - napi_writable, - napi_enumerable, - napi_configurable For more information on the flags and on napi_property_attributes, please read the documentation here.