instanceof的判断原理

作者: 月半小夜曲_ | 来源:发表于2018-09-17 18:13 被阅读2次
    <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

    相关文章

      网友评论

        本文标题:instanceof的判断原理

        本文链接:https://www.haomeiwen.com/subject/lvgrnftx.html