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
相關文章
相關標籤/搜索