這是本人珍藏的圖,關(guān)系一目了然。

原型鏈&構(gòu)造函數(shù).png
-
顯式原型
prototype:函數(shù)/方法擁有一個prototype屬性,指向函數(shù)的原型對象。(通過
Function.prototype.bind方法構(gòu)建的函數(shù)沒有prototype屬性) -
隱式原型
__proto__:任意對象都有一個內(nèi)置屬性[[prototype]],大多瀏覽器支持通過__proto__來訪問,在ES5中有了對這個內(nèi)置屬性的標(biāo)準(zhǔn)Get方法:Object.getPrototypeOf()(
Object.prototype這個對象是個例外,它的__proto__值為null ) (到終點) 原型鏈:這些對象及原型對象通過
__proto__屬性鏈接形成的鏈路結(jié)構(gòu)就行原型鏈。原型鏈?zhǔn)怯啥嗉壐笇ο笾鸺壚^承形成的。原型鏈保存著一個對象可用的所有屬性和方法。原型鏈控制著屬性和方法的使用順序:就近原則--先子級后父級關(guān)系:
instance.constructor.prototype = instance.__proto__
1. {}.constructor === Object // true
2. {}.__proto__ === Object.prototype // true
// 任意對象的__proto__都指向Object.prototype
// constructor和prototype是相互反指的:構(gòu)造函數(shù)和原型對象的互指的
// Object.prototype是一個對象,但是其指向null終點
function Fn(){} // true
3. Fn.constructor === Function // true
4. Fn.__proto__ === Function.prototype // true
5. Fn.__proto__ === Fn.constructor.prototype
// 任意函數(shù)的__proto 是 其構(gòu)造函數(shù)(Function)的prototype
const foo = new Fn()
// foo是對象,通過new構(gòu)建的都是對象,原型(prototype)也都是對象
6. foo.constructor === Fn // true
7. foo.__proto__ === Fn.prototype // true
8. foo.__proto__ === foo.constructor.prototype
// new出來的對象的__proto 是 其構(gòu)造函數(shù)(繼承來的)的prototype