概述instanceof运算符用于判断构造函数的prototype属性指向的对象是否存在待检测对象的另一个原型链语法objinstanceofObject;//真正的实例obj不在对象构造函数中描述的instanceof操作符,用于检测参数对象的原型链上是否存在constructor.prototype。例1.instanceof,obj的常用用法instanceofObject检测参数obj的原型链中是否存在Object.prototype。Person的原型在pfunctionPerson(){}的原型链中;varp=newPerson();console.log(pinstanceofPerson);//true2。继承中判断实例是否属于其父类Student和Person在s的原型链中functionPerson(){};functionStudent(){};varp=newPerson();Student.prototype=p;//inherit原型vars=newStudent();console.log(sinstanceofStudent);//trueconsole.log(sinstanceofPerson);//true3.复杂用法这里的案例必须熟悉原型链才能理解functionPerson(){}console.log(ObjectinstanceofObject);//true//第一个Object的原型链:Object=>//Object.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个Object的原型:Object=>目的。prototypeconsole.log(FunctioninstanceofFunction);//true//第一个Function的原型链:Function=>Function.__proto__=>Function.prototype//第二个Function的原型:Function=>Function.prototypeconsole.log(FunctioninstanceofObject);//true//Function=>//Function.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//Object=>Object.prototypeconsole.log(Person实例函数);//true//Person=>Person.__proto__=>Function.prototype//Function=>Function.prototypeconsole.log(StringinstanceofString);//false//第一个String的原型链:String=>//String.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个String的原型链:String=>String.prototypeconsole.log(BooleaninstanceofBoolean);//false//第一个Boolean的原型链:Boolean=>//Boolean.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个Boolean的原型链:Boolean=>Boolean.prototypeconsole.log(PersoninstanceofPerson);//false//第一个Person的原型链:Person=>//Person.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个Person的原型链:Person=>Person.prototype总结了上面的规范,做了一个函数来模拟AinstanceofB:function_instanceof(A,B){varO=B.prototype;//取B的显示原型A=A.__proto__;//取隐式Awhile的原型(true){//Object.prototype.__proto__===nullif(A===null)返回假;if(O===A)//这里的重点:当O严格等于A时,返回truereturntrue;A=A.__proto__;}}
