Skip to content

如何判断一个对象是否属于某个类? ​

本节目标:理解“如何判断一个对象是否属于某个类?”的核心思路,并能把它用于实际开发或面试表达。

==instanceof== ==运算符来判断构造函数的== ==prototype== ==属性是否出现在对象的原型链中的任何位置。==

==通过对象的== ==constructor== ==属性来判断,对象的== ==constructor== ==属性指向该对象的构造函数,但是这种方式不是很安全,因为== ==constructor== ==属性可以被改写。==

==第三种方式,如果需要判断的是某个内置的引用类型的话,可以使用====Object.prototype.toString()== ==方法来打印对象的== ==[[Class]]== ==属性来进行判断。==

**模拟实现**
function myInstanceof(left, right) {
    let proto = Object.getPrototypeOf(left), // 获取对象的原型
        prototype = right.prototype; // 获取构造函数的 prototype 对象
    // 判断构造函数的 prototype 对象是否在对象的原型链上
    while (true) {
        if (!proto) return false;
        if (proto === prototype) return true;
        proto = Object.getPrototypeOf(proto);
    }
}

本站总访问 — 次