JS原型與原型鏈

一. 全局對(duì)象window

ECMAScript 規(guī)定全局對(duì)象叫做 global遣妥,但是瀏覽器把 window 作為全局對(duì)象(瀏覽器先存在的)
window 就是一個(gè)哈希表爆阶,有很多屬性。
window 的屬性就是全局變量辨图。
全局變量分為兩種,一是ECMAScript規(guī)定的吱韭,如:

  • global.parseInt
  • global.parseFloat
  • global.Number
  • global.String
  • global.Boolean
  • global.Object
    另一種是瀏覽器自己加的屬性鱼的。如:
  • window.alert
  • window.prompt
  • window.comfirm
  • window.console.log
  • window.console.dir
  • window.document
  • window.document.createElement
  • window.document.getElementById
    window對(duì)象中的所有方法都可以省去window,window.alert可以寫成alert猿规,且這些屬性在不同瀏覽器中顯示出來(lái)的效果也可能不同

二. 簡(jiǎn)單類型與對(duì)象的區(qū)別

var n1 = 1
var n2 = new Number(1)

以上兩種都是聲明數(shù)值的方法宙橱,第一種創(chuàng)建的是簡(jiǎn)單數(shù)據(jù)類型,第二種創(chuàng)建的是一個(gè)對(duì)象师郑。他們之間有什么區(qū)別呢?
首先是占用內(nèi)存的方式不一樣张遭,


內(nèi)存圖

由于n1是簡(jiǎn)單數(shù)據(jù)類型地梨,存儲(chǔ)在棧內(nèi)存中,而n2是一個(gè)對(duì)象的烁,所以棧內(nèi)存存儲(chǔ)的是一個(gè)地址诈闺,地址指向該對(duì)象內(nèi)容所存儲(chǔ)的堆內(nèi)存。

三. 一些常用的屬性

  1. Number對(duì)象
Number的常用屬性 含義
Number.valueOf() 獲取對(duì)象本身的值
Number.toString() 將數(shù)值轉(zhuǎn)化為字符串
Number.toFixed() 將其轉(zhuǎn)換為小數(shù)
Number.toExponential() 將其轉(zhuǎn)化為科學(xué)計(jì)數(shù)法
  1. String對(duì)象
String的常用屬性 含義
String.charAt() 獲取字符串中某一位的字符
String.charCodeAt() 獲取字符串中某一位的字符的Unicode編碼
String.trim() 刪除字符串中多余的空格
String1.concat(String2) 連接字符串1和字符串2
String.slice(start,end) 切片襟雷,截取字符串(包前不包后),從start到end
String.replace('e','o') 將字符串中的e替換成o(只能替換第一次出現(xiàn)的字符)
String.indexOf() 搜索字符串中的內(nèi)容(只檢測(cè)到第一次出現(xiàn)的字符)咧虎,沒(méi)搜到返回-1
String.split() 分隔
String.substr(start[, length]) 截取,返回一個(gè)字符串中從指定位置開(kāi)始到指定字符數(shù)的字符

四. 原型

Number砰诵、String捌显、Boolean、Object這四類對(duì)象他們都會(huì)擁有一些共同的屬性扶歪,這些屬性是一樣的,如果他們各自擁有各自的這些一樣的屬性的話善镰,就會(huì)非常浪費(fèi)內(nèi)存,所以就有了公用屬性乎完,把所有的對(duì)象共有的屬性全部放在heap內(nèi)存的一個(gè)地方品洛,當(dāng)需要使用的時(shí)候,引用這個(gè)對(duì)象即可毫别,這么操作就會(huì)減少不必要的內(nèi)存浪費(fèi)岛宦,而這個(gè)公有屬性耍缴,也就是原型

__ proto__就是這些共用屬性的引用
由于Number变汪、String、Boolean這三種對(duì)象比較特殊裙盾,他們是本身Number、String庐完、Boolean的同時(shí),也是對(duì)象门躯,所以他們的__ proto__指向的是自己本身的公有屬性酷师,這些公有屬性的__ proto__指向的才是Object的公有屬性


__proto__

圖中箭頭從左到右連成的線叫原型鏈山孔,簡(jiǎn)單理解就是原型組成的鏈,對(duì)象的__ proto__是原型饱须,而原型也是一個(gè)對(duì)象,也有__ proto__屬性譬挚,原型的__ proto__又是原型的原型酪呻,就這樣可以一直通過(guò)__ proto__往上找,這就是原型鏈玩荠,當(dāng)向上找找到Object的原型的時(shí)候,這條原型鏈就算到頭了(Object的原型的__ proto__為null)

  • __ proto__與prototype的區(qū)別
    即使不寫任何代碼闷尿,JS引擎也會(huì)把原型鏈以及各個(gè)原型對(duì)象準(zhǔn)備好女坑,并且,為了不讓他們被當(dāng)成垃圾回收匆骗,瀏覽器用Object.prototype指向原型對(duì)象,所以不寫代碼就會(huì)有prototype
    __ proto__ 是某對(duì)象公用屬性的引用碉就,是為了用戶使用其共用屬性中的方法而存在的 。
    prototype 是瀏覽器寫的筋量,本身就存在烹吵,是某對(duì)象的共同屬性的引用年叮,為了不讓對(duì)象的公用屬性因沒(méi)有被調(diào)用而被垃圾回收而存在玻募。

五. 一些等式

var 對(duì)象 = new 函數(shù); 是JS中聲明一個(gè)對(duì)象的常用方法,可以推導(dǎo)出一些等式:

  • 對(duì)象.__ proto__ === 函數(shù).prototype(__ proto__是對(duì)象的屬性跃惫,prototype是函數(shù)的屬性)

從上面最基本的等式我們可以推導(dǎo)出下面的等式

  • 函數(shù).prototype.__ proto__ === Object.prototype (由于函數(shù).prototype是一個(gè)對(duì)象)
  • 函數(shù).__ proto__ === Function.prototype(函數(shù)本身是函數(shù),但它也是一個(gè)對(duì)象爆存,它的構(gòu)造函數(shù)是Function)
  • Function.__ proto__ === Function.prototype(Function既是對(duì)象蝗砾,也是函數(shù),但它優(yōu)先是個(gè)函數(shù))
    可以看出闲勺,F(xiàn)unction.prototype 與Funciton.__ proto __ 互相引用
    而且扣猫,Object.__ proto __ === Function.prototype,因?yàn)?Function 是 Object 的構(gòu)造函數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末癌幕,一起剝皮案震驚了整個(gè)濱河市昧穿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谚中,老刑警劉巖寥枝,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囊拜,死亡現(xiàn)場(chǎng)離奇詭異比搭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蜜托,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)幔托,“玉大人蜂挪,你說(shuō)我怎么就攤上這事√匿蹋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵史煎,是天一觀的道長(zhǎng)篇梭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)结窘,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任喉磁,我火速辦了婚禮协怒,結(jié)果婚禮上卑笨,老公的妹妹穿的比我還像新娘。我一直安慰自己妖滔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布座舍。 她就那樣靜靜地躺著曲秉,像睡著了一般采蚀。 火紅的嫁衣襯著肌膚如雪榆鼠。 梳的紋絲不亂的頭發(fā)上亥鸠,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天读虏,我揣著相機(jī)與錄音,去河邊找鬼盖桥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛揩徊,可吹牛的內(nèi)容都是我干的塑荒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼齿税,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼彼硫!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起凌箕,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拧篮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后牵舱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體串绩,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年芜壁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了礁凡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡慧妄,死狀恐怖顷牌,靈堂內(nèi)的尸體忽然破棺而出塞淹,到底是詐尸還是另有隱情,我是刑警寧澤疗锐,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布滑臊,位于F島的核電站雇卷,受9級(jí)特大地震影響关划,放射性物質(zhì)發(fā)生泄漏贮折。R本人自食惡果不足惜调榄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一每庆、第九天 我趴在偏房一處隱蔽的房頂上張望缤灵。 院中可真熱鬧腮出,春花似錦拔创、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)君珠。三九已至娇斑,卻和暖如春材部,著一層夾襖步出監(jiān)牢的瞬間乐导,已是汗流浹背物臂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晋涣,地道東北人姻僧。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓撇贺,卻偏偏與公主長(zhǎng)得像松嘶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子巢音,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容