前面介紹了普通對象的原型鏈結構,下面會先介紹一下原型對象中的屬性和方法,而後介紹函數對象的原型鏈,最後將原型鏈進行整合一下.瀏覽器
第一部分Object.prototype的屬性和方法函數
1 Object.prototype.toString方法工具
由於Object.prototype頂級對象中定義了toString方法,因此任何對象都有一個toString方法.prototype
能夠用來檢測對象的類型,固然只能檢測內置對象的類型,若是是自定義構造函數建立的對象的話沒法準確檢測出來類型.對象
使用方式:Object.prototype.toString.call(對象)blog
輸出結果:"[object 構造函數名稱]"繼承
最後輸出的結果中第二個值就是對象對應的對象類型.原型鏈
2 Object.prototype.hasOwnProperty()開發
判斷一個屬性是否屬於對象自己,而不是繼承過來的屬性,返回值是true或者false.原型
全部對象均可以直接調用這個方法.
3 Object.prototype.isPrototypeOf()
判斷當前對象是不是參數對象的原型對象,返回值true或者false.
全部對象均可以直接調用這個方法.
4 Object.prototype.propertyIsEnumerable()
檢測這個屬性在對象中是否能夠被枚舉,返回值true或者false.
是否能夠被枚舉指的是可否經過for...in循環語句訪問到這個屬性.
第二部分函數對象的原型鏈
函數對象的原型鏈也是基於Object原型鏈的基礎上的.
咱們能夠最後總結出兩個結論:
a 任何函數都是Function構造函數的實例(包括Object等構造函數以及Function本身,也就是說本身建立了本身):函數.__proto__===Function.prototype===Function.__proto__
b Function的原型對象繼承於Object的原型對象:Function.prototype.__proto__===Object.prototype
最後咱們得出:Object.prototype是全部對象的頂級對象.
第三部分原型鏈的整合
原型鏈的概念比較抽象,我這裏畫了一個原型結構圖,能夠方便記憶,固然能夠直接使用瀏覽器的開發者工具查找一個對象的原型鏈結構.