<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