nodejs 如何判断一个变量是不是个类?

nodejs 如何判断一个变量是不是个类?

class Test {}
function Test {}
阅读 2.7k
2 个回答

想到一个方法,使用 toString 可以查看是不是以 class 开头

class Test {}
const isCalss = (klass)=>klass.toString().startsWith('class')
console.log(isClass(Test))

function Test2(){}
console.log(isClass(Test2))
function isClass(v) {
    try {
        new v();
    } catch (e) {
        if (e.message.includes('is not a constructor')) {
            return false;
        }
       
        const proto = Object.getPrototypeOf(v);
        const keys = Object.getOwnPropertyNames(proto);
        for (let key of keys) {
            const descriptor = Object.getOwnPropertyDescriptor(proto, key);
            if (descriptor.enumerable === false) {
                return true;
            }
        }
    }
    return true;
}

class TestClass {}
function TestFunc() {}

console.log(isClass(TestClass)); // true
console.log(isClass(TestFunc)); // false
推荐问题