getOwnPropertyStatics
function getOwnPropertyStatics(staticClass) {
const KNOWN_STATICS = {
name: true,
length: true,
prototype: true,
caller: true,
callee: true,
arguments: true,
arity: true
};
let result = [];
let keys = Object.getOwnPropertyNames(staticClass);
keys = keys.concat(Object.getOwnPropertySymbols(staticClass));
for (let i = 0; i < keys.length; ++i) {
const key = keys[i];
if (!KNOWN_STATICS[key]) {
result.push(key)
}
}
return result;
}
// 静态类方法转对象
function stcClassToObj(staticClass) {
const KNOWN_STATICS = {
name: true,
length: true,
prototype: true,
caller: true,
callee: true,
arguments: true,
arity: true
};
let result = {};
let keys = Object.getOwnPropertyNames(staticClass);
keys = keys.concat(Object.getOwnPropertySymbols(staticClass));
for (let i = 0; i < keys.length; ++i) {
const key = keys[i];
if (!KNOWN_STATICS[key]) {
result[key] = staticClass[key];
}
}
return result;
}
class staticClassTest {
static a() {
console.log('这是a函数');
}
static b() {
console.log('我是b函数,我即将调用当前类下的a函数');
this.a();
}
}
staticClassTest.b(); // 静态类调用案例
// 输出静态方法
console.log(getOwnPropertyStatics(staticClassTest));
console.log(stcClassToObj(staticClassTest))

参考