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

悉达思(Siddharth)

我处于一种情况下,我需要检查对象是否是子类的实例,但同时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: (...)';

检查对象是否是类的“直接实例”

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章