获取类中的所有静态getter

Alm*_*mis 9 javascript getter node.js ecmascript-6 es6-class

假设我有这个类(我使用它像枚举):

class Color {
    static get Red() {
        return 0;
    }
    static get Black() {
        return 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么类似Object.keys拿到['Red', 'Black']

我正在使用Node.js v6.5.0,这意味着某些功能可能会丢失.

Mic*_*ski 16

使用Object.getOwnPropertyDescriptors()并过滤结果以仅包含具有getter的属性:

class Color {
    static get Red() {
        return 0;
    }
    static get Black() {
        return 1;
    }
}

const getters = Object.entries(Object.getOwnPropertyDescriptors(Color))
  .filter(([key, descriptor]) => typeof descriptor.get === 'function')
  .map(([key]) => key)

console.log(getters)
Run Code Online (Sandbox Code Playgroud)

您也可以尝试这种方法 - 它应该在Node.js 6.5.0中工作.

class Color {
    static get Red() {
        return 0;
    }
    static get Black() {
        return 1;
    }
}

const getters = Object.getOwnPropertyNames(Color)
  .map(key => [key, Object.getOwnPropertyDescriptor(Color, key)])
  .filter(([key, descriptor]) => typeof descriptor.get === 'function')
  .map(([key]) => key)

console.log(getters)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这也是检索非静态 getter 的有效方法,只需在“Color.prototype”而不是“Color”中查找即可。 (2认同)