instanceof的判断原理

48次阅读

共计 997 个字符,预计需要花费 3 分钟才能阅读完成。

<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

正文完
 0