淺談Js原型與原型鏈

關(guān)于JS面向?qū)ο?,我們首先需要了解的一個問題,就是什么是內(nèi)存!

var a = 1 發(fā)生了什么?

? ?我們常說的內(nèi)存是指的插在電腦上的內(nèi)存條,一個8g的內(nèi)存條大概40%分配給系統(tǒng),大概1G分配給瀏覽器,而分配給瀏覽的1G中大概200m分配給了JS。電腦只存0跟1,我們的代碼存到內(nèi)存里會經(jīng)過一些列操作。
? ?內(nèi)存有棧內(nèi)存(Stack)與堆內(nèi)存(Heap),JS中簡單類型(number、string、boolean、symble、null、undefined)的值一般儲存在Stack棧內(nèi)存中,復(fù)雜類型的值儲存在Heap堆內(nèi)存(以Heap地址存入,一般是對地址的引用),以下以簡單的圖示聲明到內(nèi)存發(fā)生的操作。

簡單類型的值一般操作Stack棧內(nèi)存
復(fù)雜類型值同時操作Stack棧內(nèi)存與Heap堆內(nèi)存

以下為一些內(nèi)存的簡單示意


a

b

c

d

對于上述代碼中都有一個b=a的操作,這稱為“拷貝”,將棧內(nèi)存與堆內(nèi)存完全拷貝過來又稱為“深拷貝”,對所有的基本類型而言都是深拷貝(因為沒有堆內(nèi)存)。對于復(fù)雜類型,只拷貝了棧內(nèi)存而沒有拷貝堆內(nèi)存,就是“淺拷貝”。簡單理解,b=a,b變不影響a就是深拷貝,b變導(dǎo)致a變就是淺拷貝。

JS面向?qū)ο?/h2>

我們?yōu)g覽器剛打開的時候,里面就內(nèi)置了很多屬性,這就是為什么一開始瀏覽器就占據(jù)很多內(nèi)存的部分原因。對于瀏覽器自帶的對象,全局對象global,瀏覽器里稱為window。這些自帶的屬性中一部分是基于ECMAScript標(biāo)準(zhǔn),一部分是瀏覽器自己的(私有的,不同瀏覽器不同),以谷歌瀏覽器為例:

  • ECMAScript標(biāo)準(zhǔn):
    • parseInt
    • parseFloat
    • Number
    • Boolean
    • String
    • Object
  • Google瀏覽器私有:
    • alert(彈窗提示)
    • promote(用戶填寫)
    • confirm(確認(rèn))
    • console(開發(fā)者)
    • document(文檔)DOM
    • history(瀏覽器)BOM

對于var a = 1,為什么可以調(diào)用toString方法就可以理解了。調(diào)用該方法的時候,瀏覽器會自動虛擬(拷貝)一個對象,然后調(diào)用其中的tostring,調(diào)用完后則消失。

關(guān)于原型與原型鏈

JavaScript 常被描述為一種基于原型的語言 (prototype-based language)——每個對象擁有一個原型對象,對象以其原型為模板、從原型繼承方法和屬性。原型對象也可能擁有原型,并從中繼承方法和屬性,一層一層、以此類推。這種關(guān)系常被稱為原型鏈 (prototype chain),它解釋了為何一個對象會擁有定義在其他對象中的屬性和方法。
準(zhǔn)確地說,這些屬性和方法定義在Object的構(gòu)造器函數(shù)(constructor functions)之上的prototype屬性上,而非對象實例本身。


一個關(guān)于原型鏈的簡單示意圖

要記住的一個公式
var _______ = new ______
類型:對象??????類型:函數(shù)對象
var 對象 = new 函數(shù)()
對象._ _proto_ _ == 函數(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)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,774評論 1 45
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,621評論 1 32
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點點福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運大...
    HetfieldJoe閱讀 3,077評論 4 14
  • JSP頁面內(nèi)取cookie cookie在本地瀏覽器以數(shù)組的形式存放,一個cookie就是一個鍵值對,通過循環(huán)數(shù)組...
    薛云龍閱讀 616評論 0 1
  • 食材明細(xì) 蓮藕 350克、水淀粉 2湯勺、水 適量、調(diào)料 適量 做法步驟 1.購買蓮藕要挑選那些外形飽滿肥大,并帶...
    膳食善盅閱讀 362評論 0 0

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