napi_property_attributes


typedef enum {
  napi_default = 0,
  napi_writable = 1 << 0,
  napi_enumerable = 1 << 1,
  napi_configurable = 1 << 2,

  // Used with napi_define_class to distinguish static properties
  // from instance properties. Ignored by napi_define_properties.
  napi_static = 1 << 10,

  // Default for class methods.
  napi_default_method = napi_writable | napi_configurable,

  // Default for object properties, like in JS obj[prop].
  napi_default_jsproperty = napi_writable |
                          napi_enumerable |
                          napi_configurable,
} napi_property_attributes; 

napi_property_attributes 是用于控制设置在 JavaScript 对象上的属性行为的位标志。除了 napi_static 之外,它们对应于 ECMAScript 语言规范区段属性 中列出的属性。它们可以是以下一个或多个位标志:

  • napi_default:属性上没有设置显式属性。默认情况下,属性是只读的,不可枚举且不可配置。
  • napi_writable:该属性是可写的。
  • napi_enumerable:该属性是可枚举的。
  • napi_configurable:该属性是可配置的,如 ECMAScript 语言规范截面属性 中定义。
  • napi_static:该属性将被定义为类的静态属性,而不是默认的实例属性。这仅由 napi_define_class 使用。napi_define_properties 会忽略它。
  • napi_default_method:像 JS 类中的方法一样,该属性是可配置和可写的,但不可枚举。
  • napi_default_jsproperty:像在 JavaScript 中通过赋值设置的属性一样,该属性是可写的、可枚举的且可配置的。