instanceof
注意:
- 1 右侧必须为函数(构造函数)
- 2 左侧必须为对象或者函数
// 用处:A instanceOf B,检测一个对象A是不是另一个对象B的实例的原理
// 查看对象B的prototype属性指向的原型对象是否在对象A的原型链上,若在则返回true,若不在则返回false。
const _instanceOf = function (obj, Fn) {
if (typeof Fn !== 'function') {
return false
}
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
return false
}
let proto = Object.getPrototypeOf(obj)
while (true) {
if (proto === null) {
return false
}
// 只有构造函数才有 prototype 属性
if (proto === Fn.prototype) {
return true
}
proto = Object.getPrototypeOf(proto)
}
}