Javascript 获取ES6类的静态列表

Javascript 获取ES6类的静态列表,javascript,class,properties,ecmascript-6,es6-class,Javascript,Class,Properties,Ecmascript 6,Es6 Class,给定一个ES6类,如何检查它以确定其可获取的静态属性和方法 在ES5中,确定附加到类(它的构造函数)的静态就像迭代函数的属性一样简单。在ES6中,似乎有一些魔术正在进行,而不是像这样公开它们。是的,默认情况下,类的所有方法都是不可枚举的 您仍然可以使用。过滤掉.prototype、.name和.length(或不是函数的所有内容)。要包含继承的静态方法,您必须显式地遍历原型链(使用Object.getPrototypeOf)。如果您想获得标准类属性名的动态列表(以便从静态成员列表中筛选出它们),

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


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

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


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

如果您想获得标准类属性名的动态列表(以便从静态成员列表中筛选出它们),您只需从空类中获取属性名:

constStandardClassProps=Object.getOwnPropertyNames(类{});
//[“长度”、“原型”、“名称”]
这将产生一个合理的、经得起未来考验的数组,该数组将动态地适应标准的更改,特别是添加新的标准静态属性

class-Foo{
静态条(){}
}
函数isOwnStaticMember(propName){
return!standardClassProps.includes(propName);
}
const staticMembers=Object.getOwnPropertyNames(Foo.filter)(isOwnStaticMember);
//[“酒吧”]