instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。instanceof 运算符的核心原理是:对象能否通过__proto__找到构造函数的原型。
代码如下
<script>
function myInstanceof(o, p) {
// 构造函数的原型
p = p.prototype
// 对象的 __proto__
o = o.__proto__
while (true) {
// 若p(即p.prototype)不能在o(原型链上找到)(即不全等),则返回false
if (o === null) return false
// 若p(即p.prototype)可以在(原型链上找到)(即全等),则返回true
if (o === p) return true
o = o.__proto__
}
}
console.log(myInstanceof([], Object)) // 控制台打印结果true
console.log(myInstanceof({}, Object)) // 控制台打印结果ttrue
</script>