获取类的静态方法

时间:2016-02-23 15:04:10

标签: javascript class static ecmascript-6

假设我们有这样一个类:

class Foo {
   static bar () {}
}

我们可以使用bar调用Foo.bar()静态方法。但是,如何才能得到一个只包含类的静态方法的数组?

从我看到的情况来看,Object.getOwnPropertyNames(Foo)返回的不仅仅是"bar"元素。

我们如何只获取静态方法或从Object.getOwnPropertyNames(Foo)过滤出非静态方法?

1 个答案:

答案 0 :(得分:9)

Object.getOwnPropertyNames(Foo)不会返回实例方法。它返回类Function上的其他属性(长度,名称,原型等),因此您可以编写一个函数来过滤掉这些:

class Foo{
    static one() {}
    two() {}
    three() {}
    static four() {}
}
const all = Object.getOwnPropertyNames(Foo)
    .filter(prop => typeof Foo[prop] === "function");
console.log(all); // ["one", "four"]

注意:这不会显示任何继承的静态方法。它会变得更加混乱,因为你需要在链上的每个功能上做到这一点。