class Base {
static instance(){
return new this()
}
name1(){
return getClassName(this)
}
static name2(){
return getClassName(new this())
}
}
class A extends Base{
}
class B extends Base{
}
console.log(A.instance().name1()==='A')
console.log(B.name2()==='B')
function getClassName(obj) {
if (obj && obj.constructor && obj.constructor.toString()) {
if(obj.constructor.name) {
return obj.constructor.name;
}
let str = obj.constructor.toString();
let arr;
if(str.charAt(0) == '[')
{
arr = str.match(/\[\w+\s*(\w+)\]/);
} else {
arr = str.match(/function\s*(\w+)/);
}
if (arr && arr.length == 2) {
return arr[1];
}
}
return undefined;
}