JS中的原型與原型鏈

原型(prototype)

在 JavaScript 中,每當(dāng)定義一個對象(函數(shù)也是對象)時候,對象中都會包含一些預(yù)定義的屬性。其中每個函數(shù)對象都有一個prototype 屬性,這個屬性指向函數(shù)的原型對象。

每個對象都有__proto__ 屬性,但只有函數(shù)對象才有 prototype 屬性。

原型的作用

通過構(gòu)造函數(shù)為實例對象定義屬性有一個缺點,同一個構(gòu)造函數(shù)的多個實例之間,無法共享屬性,從而造成對系統(tǒng)資源的浪費。

JavaScript 繼承機(jī)制的設(shè)計思想就是,原型對象的所有屬性和方法,都能被實例對象共享。也就是說,如果屬性和方法定義在原型上,那么所有實例對象就能共享,不僅節(jié)省了內(nèi)存,還體現(xiàn)了實例對象之間的聯(lián)系。

__proto__

JS 在創(chuàng)建對象(不論是普通對象還是函數(shù)對象)的時候,都有一個叫做__proto__ 的內(nèi)置屬性,用于指向創(chuàng)建它的構(gòu)造函數(shù)的原型對象。

Number、String、Boolean類型有各自的共有屬性__proto__,各自的共有屬性__proto__又指向了普通對象Object的__proto__,普通對象Object的__proto__指向null

var o1 = {}
o1.__proto__ === Object.prototype //true
var n1 = new Number(1)
n1.__proto__ === Number.prototype //true
n1.__proto__.__proto__ === Object.prototype //true
n1.__proto__.__proto__.__proto__ === null //true

原型鏈

原型鏈的基本思想就是利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。

JavaScript引擎在訪問對象的屬性時,如果在對象本身中沒有找到,則會去原型鏈中查找,如果找到,直接返回值,如果整個鏈都遍歷且沒有找到屬性,則返回undefined。

?著作權(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)容

  • 什么是原型語言 只有對象,沒有類;對象繼承對象,而不是類繼承類。 “原型對象”是核心概念。原型對象是新對象的模板,...
    zhoulujun閱讀 2,471評論 0 12
  • ??面向?qū)ο螅∣bject-Oriented,OO)的語言有一個標(biāo)志,那就是它們都有類的概念,而通過類可以創(chuàng)建任意...
    霜天曉閱讀 2,265評論 0 6
  • 全局對象Window ECMAScript 規(guī)定全局對象叫做 global,但是瀏覽器把 window 作為全局對...
    Grit0821閱讀 1,110評論 0 3
  • JS中原型鏈,說簡單也簡單。 首先明確: 函數(shù)(Function)才有prototype屬性,對象(除Object...
    前小白閱讀 4,076評論 0 9
  • 姓名:廉超~公司:上海緣綴包裝 【日精進(jìn)打卡第95天】 【知~學(xué)習(xí)】 《六項精進(jìn)》1遍 《大學(xué)》遍 《活法》讀完1...
    上海緣綴廉超閱讀 225評論 0 0

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