我想查看一个对象的类,例如:
class Foo {}
var foo = new Foo();
我看到这篇帖子In ES6, how do you check the class of an object?正确地说我可以使用
if (foo instanceof Foo) { ... }
有没有办法做到这一点,而不必要求我要检查的每个类到文件?如果我使用foo instanceof Foo
进行操作,对于许多类,我必须要求每个类都进入文件(通常仅用于此目的)。
还有其他办法吗?
答案 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')) ...