获取类名

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;
    }

 

posted @ 2020-06-17 17:16  很小的小雨  阅读(110)  评论(0编辑  收藏  举报