原型與原型鏈

原型及原型鏈?zhǔn)鞘裁?/h5>

JS中的對象纠屋,在創(chuàng)建時都會有一個內(nèi)置屬性据忘,即__proto__屬性岖圈,該屬性指向一個對象讹语,事實上可以理解為對另一個對象的引用。而被引用的對象就是原型對象蜂科。與之相對的顽决,所有函數(shù)也可通過一個內(nèi)置屬性prototype指向原型對象。

var a = new Object()
a.__proto__ === Object.prototype // true

var b = {}
b.__proto__ === Object.prototype // true

當(dāng)對象是由構(gòu)造器函數(shù)生成的時候导匣,結(jié)果也是一樣才菠。

function F() {}
var c = new F()
c.__proto__ === F.prototype // true
c.__proto__.__proto__ === Object.prototype // true

在上面的例子中,c.__proto__.__proto__即構(gòu)成了一個連接到頂層Object.prototype原型對象的鏈接贡定,這就是原型鏈赋访。通過以上例子,可以簡單的得到

對象.__proto__  === 對象的構(gòu)造函數(shù).prototype
Function.__proto__  === Function.prototype // true 函數(shù)也是一種對象
Function.__proto__.__proto__ === Object.prototype // true

事實上缓待,__proto__prototype只是對象和函數(shù)中的兩個屬性名罷了蚓耽,它們分別指向一個原型對象,頂層的原型對象就是Object.prototype所指向的對象旋炒。因為Object.prototype指向的是一個對象步悠,那么該對象也有一個__proto__屬性,又因為Object.prototype是指向頂層原型對象国葬,那么

Object.prototype.__proto__  === null // true
原型的作用

說了這么多贤徒,接著說原型的作用芹壕。原型存儲著一些共有的屬性及方法汇四。所有對象(函數(shù)也是種對象)都可通過原型鏈來訪問其中的屬性。另外踢涌,既然__proto__prototype只是代表引用通孽,那么就可以改變它們引用的原型對象。
如果改變原型對象屬性睁壁,會影響到與之關(guān)聯(lián)的其他對象對其屬性的調(diào)用背苦,畢竟對于對象都是引用而非拷貝,這需要特別注意潘明。

var x1 = {a:2};
var x2 = Object.create(x1);
x2.a; // 2

在上面的代碼中行剂,將x1設(shè)置為x2的原型,x2此時就能訪問x1對象的屬性钳降。
所以只要理解了在對象及函數(shù)背后含有指向另一個對象的屬性就好理解原型及原型鏈了厚宰。原型是為了方便存放一些公用屬性及方法,原型鏈就是用來指向原型的就好了。

另外铲觉,如果原型鏈中存在相同的屬性名時澈蝙,先鏈接到的屬性會屏蔽后面的相同屬性。

var x1 = {a:1};
x1.__proto__.a = 2;

x1.a // 1
delete x1.a // true
x1.a // 2

從上面的例子中可以看到撵幽,在對象內(nèi)部及對象原型設(shè)置擁有相同屬性名的a灯荧,此時調(diào)用x1.a得到的是1,當(dāng)刪除自身屬性a后盐杂,原型中的a就會浮現(xiàn)出來逗载。
可以通過Object.getPrototypeOf(obj)來獲取對象的原型。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末链烈,一起剝皮案震驚了整個濱河市撕贞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌测垛,老刑警劉巖捏膨,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異食侮,居然都是意外死亡号涯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門锯七,熙熙樓的掌柜王于貴愁眉苦臉地迎上來链快,“玉大人,你說我怎么就攤上這事眉尸∮蛭希” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵噪猾,是天一觀的道長霉祸。 經(jīng)常有香客問我,道長袱蜡,這世上最難降的妖魔是什么丝蹭? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮坪蚁,結(jié)果婚禮上奔穿,老公的妹妹穿的比我還像新娘。我一直安慰自己敏晤,他們只是感情好贱田,可當(dāng)我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嘴脾,像睡著了一般男摧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天彩倚,我揣著相機與錄音筹我,去河邊找鬼。 笑死帆离,一個胖子當(dāng)著我的面吹牛蔬蕊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哥谷,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼岸夯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了们妥?” 一聲冷哼從身側(cè)響起猜扮,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤监婶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后惑惶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡带污,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年僵控,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鱼冀。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖充易,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翘紊,我是刑警寧澤蔽氨,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布藐唠,位于F島的核電站帆疟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宇立。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一柳琢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柬脸,春花似錦他去、人聲如沸倒堕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骤宣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間憔披,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工芬膝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔗候。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像锈遥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子所灸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,781評論 2 361

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