All*_*nde 4 javascript properties class ecmascript-6 es6-class
给定ES6类,我如何检查它以确定其可获取的静态属性和方法?
在ES5中,确定附加到类(它的构造函数)的静态就像迭代函数的属性一样简单.在ES6中,似乎有一些不会暴露它们的魔法.
是的,class默认情况下,es的所有方法都是不可枚举的.
您仍然可以使用它们进行迭代Object.getOwnPropertyNames.过滤掉.prototype,.name并.length(这不是一个函数或只是一切).要包含继承的静态方法,您必须显式地(使用Object.getPrototypeOf)遍历原型链.
如果您想获取标准类属性名称的动态列表(以便可以将它们从静态成员列表中过滤出来),您可以简单地从空类中获取属性名称:
const standardClassProps = Object.getOwnPropertyNames(class _{});
// ["length", "prototype", "name"]
Run Code Online (Sandbox Code Playgroud)
这将产生一个合理的面向未来的数组,它将动态适应标准的变化,特别是新标准静态属性的添加。
class Foo {
static bar() {}
}
function isOwnStaticMember(propName) {
return !standardClassProps.includes(propName);
}
const staticMembers = Object.getOwnPropertyNames( Foo ).filter(isOwnStaticMember);
// ["bar"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |