如何在节点7.10(ES6)中检查对象的类

时间:2017-05-26 15:46:57

标签: node.js ecmascript-6

我想查看一个对象的类,例如:

class Foo {}
var foo = new Foo();

我看到这篇帖子In ES6, how do you check the class of an object?正确地说我可以使用

if (foo instanceof Foo) { ... }

有没有办法做到这一点,而不必要求我要检查的每个类到文件?如果我使用foo instanceof Foo进行操作,对于许多类,我必须要求每个类都进入文件(通常仅用于此目的)。

还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

该检查涉及该类,因此应该导入该类。使用instanceof导入类并检查它们是语义上正确的方式,不会留下错误空间。

可以检查班级名称。没有保证,但可以做到。如果Node应用程序由于某种原因被缩小或混淆,那么这将无法工作。如果存在具有相同名称的不同类,则不会起作用。

对于浅层检查对象是否直接从类中实例化它只是

if (foo.constructor && foo.constructor.name === 'Foo') ...

为了深入检查,应该遍历整个原型链(这是instanceof所做的):

function isInstance(proto, className) {
    do {
        if (proto && proto.constructor && proto.constructor.name === className)
            return true;
    } while (proto = Object.getPrototypeOf(proto));

    return false;
}

if (isInstance(obj, 'Foo')) ...