1. 程式人生 > >深入理解javascript原型和閉包(5)——instanceof

深入理解javascript原型和閉包(5)——instanceof

怪異 都是 ava type col function 深入理解java 為什麽 bject

對於值類型來說,可以用typeof判斷,但typeof判斷引用類型的時候返回值只有object/function,並不知道到底是哪一個。這個時候就要用到instance。例如

技術分享圖片

上圖中,f1是被Foo函數創建得,但是“f1 instanceof Object”為什麽是true呢?

至於為什麽過會兒再說,先說下instanceof判斷的規則。根據以上代碼看下圖:

技術分享圖片

instance運算符的第一個變量是一個對象,暫時稱為A;第二個變量一般是一個函數,暫時稱為B。

instance的判斷規則是:沿著A的_proto_這條線來找,同時沿著B的prototype這條線來找,如果兩條線能找到同一個引用,即同一個對象,那麽久返回true,如果找到終點都沒有重合則返回false。

根據上面的規則,就可以看到“f1 instanceof Object“”都指向Object.prototype,因此返回true。

通過上面的規則,可以解釋更多怪異的現象,例如:

技術分享圖片

技術分享圖片

從上面圖中可以看出,最終都是指向一個地方。

instance表示的就是一種繼承關系,或者原型鏈的結構。

深入理解javascript原型和閉包(5)——instanceof