Javascript 为什么可以';是否枚举定义为不可枚举的对象属性?

Javascript 为什么可以';是否枚举定义为不可枚举的对象属性?,javascript,Javascript,我想获取通过object.defineProperty方法定义的对象属性 Object.defineProperty()方法直接在对象上定义新属性,或修改对象上的现有属性,然后返回该对象 obj-要在其上定义属性的对象 prop-要定义或修改的属性的名称 描述符:正在定义或修改的属性的描述符 那么,让我们举一个例子: > a = {} {} > a.foo = "bar" 'bar' > Object.keys(a) [ 'foo' ] > Obj

我想获取通过
object.defineProperty
方法定义的对象属性

Object.defineProperty()
方法直接在对象上定义新属性,或修改对象上的现有属性,然后返回该对象

  • obj
    -要在其上定义属性的对象
  • prop
    -要定义或修改的属性的名称
  • 描述符
    :正在定义或修改的属性的描述符
那么,让我们举一个例子:

> a = {}
{}
> a.foo = "bar"
'bar'
> Object.keys(a)
[ 'foo' ]
> Object.defineProperty(a, "bar", { get: function () { return "foo"; }})
{ foo: 'bar' }
> a.bar
'foo'
> a.foo
'bar'
> Object.keys(a)
[ 'foo' ]
> for (k in a) { console.log(k); }
foo

在for循环中,如何列出
bar
属性(该属性是通过
defineProperty
函数定义的?

enumerable
设置为
true
,将使其成为
enumerable
属性:

> Object.defineProperty(a, "b", { enumerable: true, get: function () { return "foo"; }})
{ foo: 'bar', b: [Getter] }
> for (k in a) { console.log(k); }
foo
b
> Object.keys(a)
[ 'foo', 'b' ]

true
当且仅当此属性在枚举相应对象上的属性时显示

默认值为
false


可枚举
设置为
true
,将使其成为
可枚举
属性:

> Object.defineProperty(a, "b", { enumerable: true, get: function () { return "foo"; }})
{ foo: 'bar', b: [Getter] }
> for (k in a) { console.log(k); }
foo
b
> Object.keys(a)
[ 'foo', 'b' ]

true
当且仅当此属性在枚举相应对象上的属性时显示

默认值为
false

您的问题和答案都可以改进:

你的问题是:

  • 如何使用
    Object.defineProperty
    定义可枚举属性
答:通过设置,在属性参数
可枚举:true

  • 如何检索对象上定义为不可枚举的属性
答:通过使用
Object.getOwnPropertyNames
,它将执行类似于
键的操作,除了……返回所有自己的属性,这意味着:包括不可枚举的属性,但不包括原型的属性(显然,原型链中没有属性).

您的问题和答案都可以改进:

你的问题是:

  • 如何使用
    Object.defineProperty
    定义可枚举属性
答:通过设置,在属性参数
可枚举:true

  • 如何检索对象上定义为不可枚举的属性

答:通过使用
Object.getOwnPropertyNames
,它将执行类似于
键的操作,除了……返回所有自己的属性,这意味着:包括不可枚举的属性,但不包括原型的属性(显然,原型链中没有属性).

我想这在MDN中有很好的介绍itself@thefourtheye没错,我又是一个受害者。在写下我的问题后,我找到了答案。我决定与其他用户共享信息。我想这在MDN中有很好的介绍itself@thefourtheye是的,我又是一个受害者。写下我的问题后,我找到了答案ded希望与其他用户共享信息。你知道吗?可能会尝试吗?@nicael是的,可能会。但是,我不明白为什么这个问题被否决了…不确定,但你可以使用@GameAlchemist建议来回答你的问题。你知道吗?可能会尝试吗@nicael是的,也许吧。但是,我不明白为什么这个问题被否决了……不确定,但是你可以使用@GameAlchematics建议来回答你的问题。谢谢你的
Object.getOwnPropertyNames
东西。谢谢你的
Object.getOwnPropertyNames
东西。