如何将ES6课程分解为个别功能?
class ParentClass {
}
class MyClass extends ParentClass {
static get STATIC_GETTER() {
}
static set STATIC_SETTER(value) {
}
static STATIC_METHOD() {
}
get GETTER() {
}
set SETTER(value) {
}
METHOD1() {
}
METHOD2() {
}
constructor() {
}
}
我想在控制台上打印如下内容:
The class "MyClass"
extends class: ParentClass
has:
a constructor
static getters: STATIC_GETTER
static setters: STATIC_SETTER
static method: STATIC_METHOD
getters: GETTER
setters: SETTER
methods: METHOD1,METHOD2
答案 0 :(得分:1)
与ES5不同,ES6课程是标准化的。以及原型联动。
在ES6中,实际上有两个原型链,与ES5不同。
为了在ES6中全部检索它们,建议使用全局Reflect
JS API。
以下是检索类的所有实例方法/属性以及其所有父级的方法。
function classMethods(ctor) {
if (ctor === Function.prototype) return {};
return Reflect.ownKeys(ctor.prototype).reduce((methods, k) => {
if (k !== 'constructor') {
methods[k] = ctor.prototype[k];
}
return methods;
}, classMethods(ctor.__proto__))
}
要检索遍历构造函数本身所需的所有静态方法/属性。
function classStaticProperties(ctor) {
if (ctor === Function.prototype) return {};
return Reflect.ownKeys(ctor).reduce((statics, k) => {
if (k !== 'length' && k !== 'name' && k !== 'prototype') {
statics[k] = ctor[k];
}
return statics;
}, classStaticProperties(ctor.__proto__));
}
用法:
const allMethods = classMethods(MyChildClass);
const allStaticProperties = classStaticProperties(MyChildClass);