如何枚举/发现JavaScript中的getter和setter?

埃里克·乔根森

我试图在打字稿中发现对象上的吸气剂和吸气剂。我已经尝试过Object.entries()和Object.keys(),但这些都不返回getter和setter。我如何枚举这些?

编辑:这是一些显示问题的代码:

class ThingWithGetter{
  myProperty = 22;
  get myGetter() {return 1;}
}
const thing = new ThingWithGetter()

// Does not show getter
console.log(Object.keys(thing));

// Does not show getter
const descriptors = Object.getOwnPropertyDescriptors(thing);
console.log(Object.keys(descriptors));

// Does not show getter
console.log(Object.entries(thing))
斯图尔特·K

这样做不起作用的原因是,getter位于类的原型上,该原型位于实例的原型链上,而不是实例本身。

为了显示:

class A {
  get x() { return 1 }
}

aInstance = new A()
// A {}

Object.getOwnPropertyDescriptors(aInstance)
// {}

Object.getOwnPropertyDescriptors(A.prototype)
// { constructor:
//    { value: [Function: A],
//      writable: true,
//      enumerable: false,
//      configurable: true },
//   x:
//    { get: [Function: get x],
//      set: undefined,
//      enumerable: false,
//      configurable: true } }

Object.getOwnPropertyDescriptors(Object.getPrototypeOf(aInstance))
// { constructor:
//    { value: [Function: A],
//      writable: true,
//      enumerable: false,
//      configurable: true },
//   x:
//    { get: [Function: get x],
//      set: undefined,
//      enumerable: false,
//      configurable: true } }

Axel Rauschmayer撰写了一些有关此主题的好博客文章:

请注意,如果尝试枚举对象上的所有属性,访问器和方法,则需要递归遍历原型链,直到对象具有null原型为止

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaScript getter和setter

来自分类Dev

如何创建getter和setter

来自分类Dev

如何在JavaScript中使用setter和getter,遇到错误

来自分类Dev

我如何访问 javascript 对象上的 setter 和 getter?

来自分类Dev

getter和setter中的NullPointerException

来自分类Dev

使用getter和setter与在JavaScript中定义属性

来自分类Dev

使用getter和setter与在JavaScript中定义属性

来自分类Dev

如何将 getter 和 setter 添加到枚举变量?

来自分类Dev

getter和setter如何更改Dart中的属性?

来自分类Dev

如何从IntelliJ getter / setter生成中删除`get`和`set`

来自分类Dev

如何从greenDAO生成的getter和setter中删除“m”前缀?

来自分类Dev

如何防止在JavaScript中执行继承属性的getter setter方法

来自分类Dev

枚举器 C++ 的 setter 和 getter 方法

来自分类Dev

克隆JavaScript对象-包括getter和setter

来自分类Dev

Javascript setter和getter与对象的键

来自分类Dev

Javascript setter和getter返回不同的输出

来自分类Dev

如何创建getter和setter覆盖?

来自分类Dev

如何找到相应的setter和getter?

来自分类Dev

如何自动生成getter和setter方法

来自分类Dev

我如何获得@getter和@setter?

来自分类Dev

如何创建getter和setter覆盖?

来自分类Dev

Getter和Setter函数帮助以及如何

来自分类Dev

js如何区分getter和setter

来自分类常见问题

.NET中的Getter和Setter声明

来自分类Dev

jQuery插件中的getter和setter设置

来自分类Dev

Python中成员变量的Getter和Setter

来自分类Dev

纯C中的Getter和Setter?

来自分类Dev

PHP混合在getter和setter中

来自分类Dev

PHP混合在getter和setter中