首页 > 解决方案 > Javascript:无法打印由 Object.defineProperty 定义的对象属性

问题描述

我使用Object.defineProperty方法来定义对象的属性:

const o = { a: 1 }
Object.defineProperty(o, 'b', {
  get() {
    return this.a
  }, set(value) {
    this.a = value
  }
})

但是,当我使用console.logtry to print objecto时,该b属性似乎不在其中。

但是当我尝试使用o.b它来访问它时,它可以返回正确的值

所以我很困惑:为什么属性不能打印但可以访问?

标签: javascriptobject

解决方案


添加的属性.defineProperty()默认为non-enumerable

通过设置使它们“可见”enumerable: true

var foo = {}
Object.defineProperty(foo, "a", {
  get() { return "a"; }
});

Object.defineProperty(foo, "b", {
  get() { return "b"; },
  enumerable: true
});

console.log(Object.keys(foo));


推荐阅读