JavaScript基础之--- 手写instanceof 的实现
手写instanceof 的实现:
instanceof 运算符用于测试构造函数的 prototype 属性是否出现在对象原型链中的任何位置。
实现思路:
首先 instanceof 左侧必须是对象, 才能找到它的原型链
instanceof 右侧必须是函数, 函数才会prototype属性
迭代 , 左侧对象的原型不等于右侧的 prototype时, 沿着原型链重新赋值左侧
// [1,2,3] instanceof Array ---- true // L instanceof R // 变量R的原型 存在于 变量L的原型链上 function instance_of(L,R){ // 验证如果为基本数据类型,就直接返回false const baseType = ['string', 'number','boolean','undefined','symbol'] if(baseType.includes(typeof(L))) { return false } let RP = R.prototype; //取 R 的显示原型 L = L.__proto__; //取 L 的隐式原型 while(true){ // 无线循环的写法(也可以使 for(;;) ) if(L === null){ //找到最顶层 return false; } if(L === RP){ //严格相等 return true; } L = L.__proto__; //没找到继续向上一层原型链查找 } }