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

JavaScript检查对象是否为当前类的实例,javascript,Javascript,我需要检查对象是否是子类的实例,但同时父类的instanceof应返回false 我已经找到了一种方法,但我无法想象这种方法可能失败的边缘情况。 这是正确的方法吗 这是代码的简化版本: class Employee { static [Symbol.hasInstance]( instance ) { return Object.getPrototypeOf( instance ) === this.prototype; } } class Manager ex

我需要检查对象是否是子类的实例,但同时父类的
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的功能):


这是一个糟糕的想法:更改
实例的工作方式将使每个处理此代码的人感到困惑,包括您忘记了为什么您认为这是一个好主意。如果您想知道什么是特定的类,请检查构造函数名称。检查构造函数名称不是更好,而不是更改
定义的
实例吗
instanceof
是一个广泛使用的关键字,可能会严重影响代码的可维护性。请不要只链接另一个问题(可能会被删除),还要将实际内容本身放入您的答案中。@Bergi感谢您的反馈,我相应地更新了答案。
if (!value || Object.getPrototypeOf(value) !== Foo.prototype)
  throw 'InvalidArgumentException: (...)';