一、intanceof 操作符的实现原理及实现
1.实现原理:
instanceof 运算符用于判断构造函数的 prototype(原型对象) 属性是否出现在对象的原型链中的任何位置。
function myInstanceof(left, right) {
// 获取对象的原型
let proto = Object.getPrototypeOf(left)
// 获取构造函数的 prototype 对象
let prototype = right.prototype;
// 判断构造函数的 prototype 对象是否在对象的原型链上
while (true) {
if (!proto) return false;
if (proto === prototype) return true;
// 如果没有找到,就继续从其原型上找,Object.getPrototypeOf方法用来获取指定对象的原型
proto = Object.getPrototypeOf(proto);
}
}
二、总结:
原理:
instanceof 是一个运算符,它可以用来判断某一个对象的类型,具体原理就是利用了原型和原型链(判断构造函数的prototype属性是否出现在对象的原型链中)。
instanceof =>通过 原型和原型链 判断一个实例对象与一个构造函数之间的关系的.
instanceof 左侧是一个实例对象,右侧是一个构造函数。
构造函数:形如我们的 Object、Function 都可以称之为构造函数。
eg:A instanceof B A为要判断类型的对象,B为构造函数。
更简单的说法:
- 我们拿到
instanceof左侧对象的原型链 - 再拿到 instanceof 右侧构造函数的显式原型
prototype - 如果原型链中存在显式原型
prototype,instanceof返回true,否则返回false