Javascript 获取类的静态方法

Javascript 获取类的静态方法,javascript,class,static,ecmascript-6,Javascript,Class,Static,Ecmascript 6,假设我们有这样一节课: class Foo { static bar () {} } 我们可以使用Foo.bar()调用bar静态方法。但是我们如何才能得到一个只包含类的静态方法的数组呢 在我看来,Object.getOwnPropertyNames(Foo)返回的不仅仅是“bar”元素 如何从对象中仅获取静态方法或过滤掉非静态方法。getOwnPropertyNames(Foo)?对象。getOwnPropertyNames(Foo)不会返回实例方法。它将返回类函数的其他属性(长度、名

假设我们有这样一节课:

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

在我看来,
Object.getOwnPropertyNames(Foo)
返回的不仅仅是
“bar”
元素


如何从
对象中仅获取静态方法或过滤掉非静态方法。getOwnPropertyNames(Foo)

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

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

注意:这不会显示任何继承的静态方法。它变得有点混乱,因为您需要在链上的每个函数上这样做。

获取父静态方法应该很容易,因为我们可以访问父类。:)谢谢!是的,但您必须记住父函数将是
函数
对象
,而不一定是您定义的类。
长度
名称
原型
不是继承的,它们是构造函数自己的属性。@Bergi很好,更新了答案。但不是来自构造函数,而是来自类函数本身