一、前言
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。参考JavaScript中instanceof和typeof的区别
二、基本用法
语法:object instanceof constructor
参数:object
某个实例对象,constructor
某个构造函数
例子:
function C(){}
function D(){}
var o = new C();
console.log(o instanceof C);//true
console.log(o instanceof D);//false
console.log(o instanceof Object);//true
C.prototype={};
let o2=new C();
console.log(o2 instanceof C);//true
console.log(o instanceof C);//false,C.prototype 指向了一个空对象,这个空对象不在 o 的原型链上
三、实现
了解了instanceof 的用法之后,我们就开始自己模拟实现
function myinstanceof(target,origin){
// 非object直接false
if(typeof target !== 'object' || origin === null) return false;
// 获取原型对象
let proto=Object.getPrototypeOf(target);
while(true){
if(proto==null) return false;
if(proto==origin.prototype) return true;
proto=Object.getPrototypeOf(proto);
}
}
// 验证
function C(){}
var o = new C();
console.log(myinstanceof(o,C));//true
网友评论