【问题标题】:Getting a list of statics on an ES6 class获取 ES6 类的静态列表
【发布时间】:2015-10-11 20:16:56
【问题描述】:

给定一个 ES6 类,我如何检查它以确定其可获取的静态属性和方法?

在 ES5 中,确定附加到类(它的构造函数)的静态变量就像迭代函数的属性一样简单。在 ES6 中,似乎发生了一些魔法,不会像这样公开它们。

【问题讨论】:

    标签: javascript class properties ecmascript-6 es6-class


    【解决方案1】:

    是的,classes 的所有方法默认都是不可枚举的。

    您仍然可以使用 Object.getOwnPropertyNames 迭代它们。过滤掉.prototype.name.length(或者过滤掉所有不是函数的东西)。要包含继承的静态方法,您必须显式遍历原型链(使用 Object.getPrototypeOf)。

    【讨论】:

      【解决方案2】:

      如果您想获取标准类属性名称的动态列表(以便您可以将它们从静态成员列表中过滤掉),您可以简单地从空类中获取属性名称:

      const standardClassProps = Object.getOwnPropertyNames(class _{});
      
      // ["length", "prototype", "name"]
      

      这将产生一个合理的面向未来的数组,该数组将动态适应标准的变化,尤其是添加新的标准静态属性。

      class Foo {
          static bar() {}
      }
      
      function isOwnStaticMember(propName) {
          return !standardClassProps.includes(propName);
      }
      
      const staticMembers = Object.getOwnPropertyNames( Foo ).filter(isOwnStaticMember);
      
      // ["bar"]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        • 2021-08-11
        • 2017-10-20
        • 2015-06-08
        • 2012-05-11
        相关资源
        最近更新 更多