概念
instanceof运算符用于检测对象的原型链上是否存在构造函数的 prototype属性,即是否存在构造函数的原型对象prototype;有则返回 true,否则返回 false。
-
语法:
object instanceof constructorobject:某个实例对象constructor:某个构造函数
用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
function A(){}
function B(){}
B.prototype = new A();
var b = new B();
b instanceof B // true
b instanceof A // true
b.__proto__ === B.prototype // true
b.__proto__.constructor === B // false
b.__proto__.constructor === B.prototype // false
b.__proto__.constructor === A //true
注意:
Object.create(null)会造成创建的对象其__proto__指向为空
实现instanceof
function new_instance_of(leftVaule, rightVaule) {
let rightProto = rightVaule.prototype; // 取右表达式的 prototype 值
leftVaule = leftVaule.__proto__; // 取左表达式的__proto__值
while (true) {
if (leftVaule === null) {
return false;
}
if (leftVaule === rightProto) {
return true;
}
leftVaule = leftVaule.__proto__ // 遍历左表达式的原型链
}
}