5

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

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

4

2 回答 2

11

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

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

于 2015-10-11T20:52:59.807 回答
4

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

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"]
于 2020-02-12T21:07:17.460 回答