假设我们有这样一个类:
class Foo {
static bar () {}
}
我们可以使用bar
调用Foo.bar()
静态方法。但是,如何才能得到一个只包含类的静态方法的数组?
从我看到的情况来看,Object.getOwnPropertyNames(Foo)
返回的不仅仅是"bar"
元素。
我们如何只获取静态方法或从Object.getOwnPropertyNames(Foo)
过滤出非静态方法?
答案 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"]
注意:这不会显示任何继承的静态方法。它会变得更加混乱,因为你需要在链上的每个功能上做到这一点。