instanceof的判断原理

作者 : 开心源码 本文共998个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共150人阅读
<script type="text/javascript">        //自己设置一个构造函数        function Fun(){}        //利用上面的构造函数构造一个实例        var fun1 = new Fun()        console.log(fun1 instanceof Fun)      //true        console.log(fun1 instanceof Function) //false        console.log(fun1 instanceof Object)   //true    </script>

Instanceof运算符的第一个变量是一个对象,暂时称为A;第二个变量一般是一个函数,暂时称为B。

Instanceof的判断规则是:沿着A的__proto__这条线来找,同时沿着B的prototype这条线来找,假如两条 线能找到同一个引用,即同一个对象,那么就返回true。假如找到终点还未重合,则返回false。

那我们来按照这个规则一个一个来验证上面的结果:
注意:每个函数都有一个prototype属性(原型),是一个对象,每个对象都有一个__proto__(隐式原型),指向它的构造函数的 prototype,对象没有prototype

1、fun1 instanceof Fun
fun1.__proto__=Fun.prototype
Fun.prototype
从上可以看出,fun1和Fun最后找到了同一个引用—Fun.prototype
注意:由于prototype是一个对象,所以它的__proro__就是Object.prototype

2、fun1 instanceof Function
fun1.__proto__=Fun.prototype ===>Fun.prototype.__proto__={ }.__proto__=Object.prototype
Function.prototype
可以看出fun1和Fun最后没有同一个引用
注意:Function.prototype还是指向Function.prototype

3、fun1 instanceof Object
fun1.__proto__=Fun.prototype ==> Fun.prototype.__proto__={ }.__proto__=Object.prototype
Object.prototype
从上可以看出,fun1和Object最后找到了同一个引用—Object.prototype

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » instanceof的判断原理

发表回复