获取 ES6 类的静态属性列表

6

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

在ES5中,确定附加到类(即构造函数)的静态内容很简单,只需要迭代函数的属性即可。在ES6中,似乎有一些不为人知的魔法,没有将它们公开。

2个回答

13

是的,默认情况下,所有class的方法都是不可枚举的。

然而,您仍然可以使用Object.getOwnPropertyNames来迭代它们。过滤掉.prototype.name.length(或者过滤掉所有非函数的内容)。如果要包含继承的静态方法,则必须显式地遍历原型链(使用Object.getPrototypeOf)。


5
如果您想获取标准类属性名称的动态列表(以便从静态成员列表中筛选它们),您可以从空类中获取属性名称:
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"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接