Appearance
如何判断一个对象是否属于某个类?
本节目标:理解“如何判断一个对象是否属于某个类?”的核心思路,并能把它用于实际开发或面试表达。
==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);
}
}