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运算符的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- JavaScript关键字this的用法总结
- JavaScript中函数的常用写法及调用方法
- javascript|vue-cli3 使用子目录部署问题
- 入侵检测|IPS眼中的——SQL注入绕过与反绕过
- IDEA中sout快捷键无效问题的解决方法
- 投稿|2022年中盘点:悬疑、古偶和剧情片,谁是“降本增效”下的神作?
- 权威预测(从2017高考作文看中考作文热点)
- LOL中被遗忘的辅助——加里奥
- VSCode|VSCode 中前端代码规范和编码风格实践详解
- 思维笔的空性2017.02.28-01