2019-05-29 原型和原型鏈

1、prototype

? ? ? prototype屬性是每一個函數都具有的屬性,但是不是一個對象都具有的屬性旱幼。比如

?function F(){? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

}

var f = new F()查描;?

其中F中有prototype屬性,而 f 沒有柏卤。但是 f 中的隱含的__proto__屬性指向F.prototype冬三。

f.__proto__ === F.prototype

為什么會存在prototype屬性?

Javascript里面所有的數據類型都是對象缘缚,為了使JavaScript實現面向對象的思想勾笆,就必須要能夠實現‘繼承’使所有的對象連接起來。而如何實現繼承呢桥滨?通過new的方式來實現實例窝爪。

舉個例子弛车,child1,child2都是Mother的孩子,且是雙胞胎蒲每。

function Mother(name){

? ? ? ?this.name = name;

? ? ? ?this.father = '張三';

}

var child1 = new Mother('媽媽');

var child2 = new Mother('媽媽');

如果有一天纷跛,發(fā)現孩子的父親其實是李四,那么就要修改每一個孩子的father屬性邀杏。

child1.father ='李四';

console.log(child2.father) //?張三

也就是說修改了其中一個孩子的father屬性不會影響到下一個贫奠,屬性的值無法共享。

正是這個原因才提出來prototype屬性望蜡,把需要共享的屬性放到構造函數也就是父類的實例中去唤崭。

2、__proto__

__proto__屬性是每一個對象以及函數都隱含的一個屬性脖律。對于每一個含有__proto__屬性谢肾,他所指向的是創(chuàng)建他的構造函數的prototype。原型鏈就是通過這個屬性構件的状您。

想像一下勒叠,如果一個函數對象(也稱為構造函數)a的prototype是另一個函數對象b構建出的實例,a的實例就可以通過__proto__與b的原型鏈起來膏孟。而b的原型其實就是Object的實例眯分,所以a的實例對象,就可以通過原型鏈和object的prototype鏈接起來柒桑。

function a(){

}

function b(){

}

var b1 = new b();

a.prototype = b1;

var a1 = new a();

console.log(a1.__proto__===b1);//true

console.log(a1.__proto__.__proto__===b.prototype) //true

console.log(a1.__proto__.__proto__.__proto__===Object.prototype) //true

如果要理清原型和原型鏈的關系弊决,首先要明確一下幾個概念:

1.JS中函數也是對象, 而且是一種特殊的對象

2.JS中Object原型鏈的終點指向Object.prototype

3.JS對象都有一個隱藏的__proto__屬性,他指向創(chuàng)建它的構造函數的原型魁淳,但是有一個例外飘诗,Object.prototype.__proto__指向的是null。

4.JS中構造函數和實例(對象)之間的微妙關系

構造函數通過定義prototype來約定其實例的規(guī)格, 再通過 new 來構造出實例,他們的作用就是生產對象.

function Foo(){ }

var foo = new Foo();

foo其實是通過Foo.prototype來生成實例的界逛。

構造函數本身又是方法(Function)的實例, 因此也可以查到它的__proto__(原型鏈)

function Foo(){

}

等價于 var Foo= new Function()昆稿;

而Function實際上是

function Function(){

}

也就是等價于

var Function = new Function();

所以說Function是通過自己創(chuàng)建出來的息拜。正常情況下對象的__proto__是指向創(chuàng)建它的構造函數的prototype的.所以Function的__proto__指向的Function.prototype

Object 實際上也是通過Function創(chuàng)建出來的

typeof(Object) //function 所以溉潭,

function Object(){

} 等價于

var Object = new Function();

那么Object的__proto__指向的是Function.prototype,也即是

Object.__proto__ ===?Function.prototype?//true

下面再來看Function.prototype的__proto__指向哪里

因為JS中所有的東西都是對象少欺,那么喳瓣,Function.prototype 也是對象,既然是對象赞别,那么Function.prototype肯定是通過Object創(chuàng)建出來的畏陕,所以,

Function.prototype.__proto__ === Object.prototype //true

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末仿滔,一起剝皮案震驚了整個濱河市惠毁,隨后出現的幾起案子犹芹,更是在濱河造成了極大的恐慌,老刑警劉巖仁讨,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羽莺,死亡現場離奇詭異,居然都是意外死亡洞豁,警方通過查閱死者的電腦和手機盐固,發(fā)現死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丈挟,“玉大人刁卜,你說我怎么就攤上這事∈镅剩” “怎么了蛔趴?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長例朱。 經常有香客問我孝情,道長,這世上最難降的妖魔是什么洒嗤? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任箫荡,我火速辦了婚禮,結果婚禮上渔隶,老公的妹妹穿的比我還像新娘羔挡。我一直安慰自己,他們只是感情好间唉,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布绞灼。 她就那樣靜靜地躺著,像睡著了一般呈野。 火紅的嫁衣襯著肌膚如雪低矮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天被冒,我揣著相機與錄音军掂,去河邊找鬼。 笑死姆打,一個胖子當著我的面吹牛,可吹牛的內容都是我干的肠虽。 我是一名探鬼主播幔戏,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼税课!你這毒婦竟也來了闲延?” 一聲冷哼從身側響起痊剖,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎垒玲,沒想到半個月后陆馁,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡合愈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年叮贩,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佛析。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡益老,死狀恐怖,靈堂內的尸體忽然破棺而出寸莫,到底是詐尸還是另有隱情捺萌,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布膘茎,位于F島的核電站桃纯,受9級特大地震影響,放射性物質發(fā)生泄漏披坏。R本人自食惡果不足惜态坦,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刮萌。 院中可真熱鬧驮配,春花似錦、人聲如沸着茸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涮阔。三九已至猜绣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敬特,已是汗流浹背掰邢。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伟阔,地道東北人辣之。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像皱炉,于是被迫代替她去往敵國和親怀估。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容