javascript中instanceof运算符的用法详解

概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上
语法

obj instanceof Object; //true 实例obj在不在Object构造函数中

描述 instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
实例 1.instanceof的普通的用法,obj instanceof Object 检测Object.prototype是否存在于参数obj的原型链上。
Person的原型在p的原型链中
function Person(){}; var p =new Person(); console.log(p instanceof Person); //true

2.继承中判断实例是否属于它的父类
Student和Person都在s的原型链中
function Person(){}; function Student(){}; var p =new Person(); Student.prototype=p; //继承原型var s=new Student(); console.log(s instanceof Student); //trueconsole.log(s instanceof Person); //true

3.复杂用法
这里的案例要有熟练的原型链的认识才能理解
function Person() {}console.log(Object instanceof Object); //true//第一个Object的原型链:Object=>//Object.__proto__ => Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个Object的原型:Object=> Object.prototypeconsole.log(Function instanceof Function); //true//第一个Function的原型链:Function=>Function.__proto__ => Function.prototype//第二个Function的原型:Function=>Function.prototypeconsole.log(Function instanceof Object); //true//Function=>//Function.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//Object => Object.prototypeconsole.log(Person instanceof Function); //true//Person=>Person.__proto__=>Function.prototype//Function=>Function.prototypeconsole.log(String instanceof String); //false//第一个String的原型链:String=>//String.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个String的原型链:String=>String.prototypeconsole.log(Boolean instanceof Boolean); //false//第一个Boolean的原型链:Boolean=>//Boolean.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个Boolean的原型链:Boolean=>Boolean.prototypeconsole.log(Person instanceof Person); //false//第一个Person的原型链:Person=>//Person.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个Person的原型链:Person=>Person.prototype

总结 对应上述规范做个函数模拟A instanceof B:
function _instanceof(A, B) {var O = B.prototype; // 取B的显示原型A = A.__proto__; // 取A的隐式原型while (true) {//Object.prototype.__proto__ === nullif (A === null)return false; if (O === A)// 这里重点:当 O 严格等于 A 时,返回 truereturn true; A = A.__proto__; }}

【javascript中instanceof运算符的用法详解】到此这篇关于javascript中instanceof运算符的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读