instanceof的判断原理

<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。javascript

那咱们来按照这个规则一个一个来验证上面的结果:
注意:每一个函数都有一个prototype属性(原型),是一个对象,每一个对象都有一个__proto__(隐式原型),指向它的构造函数的 prototype,对象没有prototype
一、fun1 instanceof Fun
fun1.__proto__=Fun.prototype
Fun.prototype
从上能够看出,fun1和Fun最后找到了同一个引用---Fun.prototype
注意:由于prototype是一个对象,因此它的__proro__就是Object.prototype
二、fun1 instanceof Function
fun1.__proto__=Fun.prototype ===>Fun.prototype.__proto__={ }.__proto__=Object.prototype
Function.prototype
能够看出fun1和Fun最后没有同一个引用
注意:Function.prototype仍是指向Function.prototype
三、fun1 instanceof Object fun1.__proto__=Fun.prototype ==> Fun.prototype.__proto__={ }.__proto__=Object.prototype Object.prototype 从上能够看出,fun1和Object最后找到了同一个引用---Object.prototype
相关文章
相关标签/搜索