做javascript属性描述符支持自定义属性?

use*_*948 11 javascript

我想使用具有自定义属性的属性描述符定义一个javascript属性,换句话说,除了标准"值","可写"等属性之外......例如我在下面定义了一个属性属性具有自定义属性"customAttr"的描述符.对Object.defineProperty的调用工作正常,但后来当我尝试循环遍历属性描述符的属性时,我的自定义属性未列出.我正在尝试做什么?谢谢

const o = {}

Object.defineProperty(o, 'newDataProperty', {
  value: 101,
  writable: true,
  enumerable: true,
  configurable: true,
  customAttr: 1,
})

const desc = Object.getOwnPropertyDescriptor(o, 'newDataProperty')

// List the descriptor attributes.
for (const prop in desc) {
  console.log(`${prop}: ${desc[prop]}`)
}

// PROBLEM: `customAttr` is not listed
Run Code Online (Sandbox Code Playgroud)

Jam*_*ice 8

不,这是不可能的.这是做什么的Object.defineProperty:

...

 3.让desc成为ToPropertyDescriptor使用Attributes作为参数调用的结果.

 4. 使用参数name,desc和true 调用O的[[DefineOwnProperty]]内部方法.

 5.返回Ø.

简而言之,ToPropertyDescriptor简单地忽略任何不"可枚举","可写","可配置","值","获取"或"设置"的内容:

  1. ...

  2. desc是创建一个最初没有字段的新属性描述符的结果.

  3. 如果调用参数" " 的Obj的[[HasProperty]]内部方法的结果enumerable为真,那么
    • ...

(对其他有效描述符属性重复步骤3)

 10.返回desc.

  • 谢谢...真可惜......我猜这个限制必须有充分的理由......但它关闭了许多事情的大门......我正在从C#代码生成JS代码.我有一个装饰有属性C#属性...我想在把这些属性的JS代码...当我第一次看到JS属性描述我很喜欢:"好,这正是我需要的" ..哦......好吧......仍然喜欢JS ...... (2认同)