JavaScript检查对象是否是当前类的实例



我需要检查对象是否是子类的实例,但同时instanceof应该返回父类的false

我已经找到了一种方法,但我想不出这种方法可能失败的边缘情况。这是正确的方法吗?

这是代码的简化版本:

class Employee {
static [Symbol.hasInstance]( instance ) {
return Object.getPrototypeOf( instance ) === this.prototype;
}
}
class Manager extends Employee {
}
class AssistantManager extends Manager {
}
const e1 = new AssistantManager( 'Dean' );
console.log( e1 instanceof Employee ) // false
console.log( e1 instanceof Manager ) // false
console.log( e1 instanceof AssistantManager ) // true

我发现有人试图实现同样的目标。它建议检查构造函数。可能会有所帮助。

他提到要检查构造函数,如下所示:

if (!value || value.constructor !== Foo)
throw 'InvalidArgumentException: (...)';

或者对象的原型(这更类似于instanceof所做的(:

if (!value || Object.getPrototypeOf(value) !== Foo.prototype)
throw 'InvalidArgumentException: (...)';

检查对象是否为';直接实例';一类

最新更新