您遇到的问题是由于您定义的属性不是
enumerable
.从
mdn
以下内容:
可枚举的
true
如果且仅当此属性在枚举相应对象上的属性时出现。
默认为
false
.
您可以通过指定
enumerable: true
在你的财产里
descriptor
以下内容:
function Foo(){this.bar=42;}
Object.defineProperty(Foo.prototype, "baz", {
get:function(){return 25;},
set:function(val){},
enumerable: true
});
var foo = new Foo();
for(var x in foo) console.log(x);
编辑:对于getter在对象中定义的属性的可枚举性的注释,似乎是的,对象文本中定义的getter是可枚举的,但不是类定义中定义的。我不完全确定这在文档中的描述,但是如果有人找到我的答案,我会很乐意用这个更新我的答案。
const foo = {
get bar () {
return 'baz';
}
}
console.log(Object.keys(foo));
// ["bar"]
class Bar {
get baz () {
return 'qux';
}
}
console.log(Object.keys(new Bar()));
// []