1. 程式人生 > >JavaScript的Function與Object淺析

JavaScript的Function與Object淺析

前言:

JavaScript的面向物件是基於原形的,所有物件都有一條屬於自己的原型鏈。Object與Function可能很多看Object instanceof Function , Function instanceof Object都為true而迷惑,所以首先看下物件的例項。

一、JS中所謂的例項                                                             

1. 如var a = new A();這樣子通常的認為 “a為A函式的例項物件”。

2. new操作的過程是什麼? 

          1.new建立一個空物件{}稱為小C

          2.然後將A.prototype放置到小C的原型鏈頂端。即小C.__proto__指向 A.prototype

          3.執行A函式,將A中this指向小C,執行結束,如果沒有return那麼預設返回this引用。

那麼new的其中一個的作用便是把A.prototype新增到了a的原型鏈中。 

3. instanceof為js中判斷例項的方法,判斷的根據就是(例 a instanceof A) 判斷a的原型鏈中是否含有A.prototype。 

4. 綜上包括常規認識new出來的例項。  所謂o 為fn的例項物件,實際就是指o原型鏈中含有fn.prototype

、Object與Function的模糊圖解(自己畫的很搓)              


解釋: 所有函式的prototype屬性均有constructor指向該函式

所有物件均有原型鏈(Object.prototype的原型鏈為null)

      __proto__(chrome, ff中)代表[[proto]]內建屬性。

看過這個圖之後應該就明白為什麼instanceof是那個的結果了。

三、物件與Object的關係,原型鏈終結於Object.prototype 

Object.prototype的原型鏈為空(即沒有一個原型物件)。因此Object.prototype instanceof Object 為false。

    判斷型別用typeof , typeof(Object.prototype) === ‘object’.所以不是所有的物件均為Object物件例項。應該是除了Object.prototype除外的所有物件均為Object物件的例項。

本人是初學者 歡迎提看的人各種建議,說不對的地方更是感謝...