/* * 1.構造函數裏有屬性及方法----->其構造的實例對象直接經過new構造時得到這些屬性和方法 * 2.構造函數裏的原型prototype----->這個原型對象:包括1).原型對象裏的屬性和方法 --->實例化對象裏的__proto__指向這個原型對象,能夠訪問這裏的屬性和方法 * 2).constructor構造器--->指向構造函數 * 3).__proto__---->Object這個構造函數的原型對象Object.prototype * * 3.構造函數裏的__proto__----->指向構造他的構造函數的原型對象---->Function.prototype * * * 4.實例對象的原型__proto__---->指向構造他的構造函數的原型對象---構造函數的prototype * 實例化對象與構造函數之間沒有直接聯繫,經過原型對象進行聯繫,這就是原型鏈 * * 5.改變原型的指向實現繼承:將一個構造函數的prototype指向一個實例化對象(a),那麼由這個構造函數構造的實例化對象(b)的__proto__就指向了 * 這個實例化對象(a),由此b能夠獲得a的屬性和方法,而且能夠經過a的__proto__得到a的構造函數原型prototype裏的屬性和方法 * * 6.prototype和__proto__ * * prototype是函數(普通函數或構造函數或方法)特有的原型--->指向一個原型對象,即prototype對象:裏面包含着能夠繼承的原型屬性和方法 * prototype的指向能夠改變,經過改變prototype的指向,能夠造成多級的原型鏈,實現多代的繼承 * * __proto__是對象特有的隱式原型,指向構造這個對象的構造函數的prototype * * 一個實例化對象的原型鏈就是經過__proto__的這個指向得出的,這樣實例化對象能夠獲得構造函數原型對象裏的屬性和方法,實現繼承 * * * * 7.函數能夠當作一個對象,那麼他的__proto__指向哪裏呢?指向構造他的構造函數的prototype,因此就指向Function.prototype * 全部的函數均可以當作是Function的一個實例化對象 * 另外,Function是其自身的構造函數,Function.__proto__ 就指向其自身的原型對象Function.prototype * console.dir(Function.prototype == Function.__proto__); 結果爲true * * 8. 對象的__proto__會指向指向構造這個對象的構造函數的prototype,那麼原型鏈最終的原型對象prototype這個對象的__proto__指向 * 哪裏呢?------>指向Object.prototype * 即原型對象是Object這個構造函數的實例化對象 * Object.prototype.__proto__最終爲null * * * * * */