【问题标题】:Get the static methods of a class [duplicate]获取类的静态方法[重复]
【发布时间】:2016-06-05 11:47:33
【问题描述】:

假设我们有这样一个类:

class Foo {
   static bar () {}
}

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

据我所知,Object.getOwnPropertyNames(Foo) 返回的不仅仅是 "bar" 元素。

如何只获取静态方法或过滤掉Object.getOwnPropertyNames(Foo)中的非静态方法?

【问题讨论】:

    标签: javascript class static ecmascript-6


    【解决方案1】:

    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"]
    

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

    【讨论】:

    • 获取父静态方法应该很容易,因为我们可以访问父类。 :) 非常感谢!
    • 没错,但您必须记住,父函数将是 Function 和 Object,不一定是您定义的类。
    • length、name 和 prototype 是不继承的,它们是构造函数自己的属性。
    • @Bergi 好点,更新了答案。不是来自构造函数,而是来自类 Function 本身
    猜你喜欢
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    相关资源
    最近更新 更多