js原型、原型鏈及繼承

這是本人珍藏的圖,關(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容