13

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

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

有什么类似于Object.keys得到的['Red', 'Black']吗?

我正在使用 Node.js v6.5.0,这意味着可能缺少某些功能。

4

1 回答 1

20

使用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)

您也可以尝试这种方法——它应该可以在 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)

于 2016-09-03T20:10:22.610 回答