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


慕斯709654
浏览 108回答 1
1回答

青春有我

我发现有人试图完成同样的代码。它建议检查构造函数。可能会有帮助。他提到要检查构造函数,如下所示:if (!value || value.constructor !== Foo)   throw 'InvalidArgumentException: (...)';或者对象的原型(这更类似于 instanceof 所做的):if (!value || Object.getPrototypeOf(value) !== Foo.prototype)   throw 'InvalidArgumentException: (...)';检查对象是否是类的“直接实例”
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript