获取ES6类的静态列表

时间:2015-10-11 20:16:56

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

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

在ES5中,确定附加到类的静态(它的构造函数)就像迭代函数的属性一样简单。在ES6中,似乎有一些神奇的东西并没有将它们暴露出来。

2 个答案:

答案 0 :(得分:9)

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

您仍然可以使用Object.getOwnPropertyNames进行迭代。过滤掉.prototype.name.length(或者只是非功能的所有内容)。要包含继承的静态方法,您必须显式地遍历原型链(使用Object.getPrototypeOf)。

答案 1 :(得分:1)

如果要获取标准类属性名称的动态列表(以便可以将其从静态成员列表中过滤掉),则只需从空类中获取属性名称:

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