js中難以理解的原型

原型部念;我們先來看段簡單的函數(shù)

按照javascript的說法鹅士,function定義的這個Person就是一個Object(對象),而且還是一個很特殊的對象键兜,這個使用function定義的對象與使用new操作符生成的對象之間有一個重要的區(qū)別挚歧。這個區(qū)別就是function定義的對象有一個prototype屬性芒涡,使用new生成的對象就沒有這個prototype屬性,我們一般稱為普通對象物延!

我們需要理解記憶以下的邏輯順序:

Person是一個對象,它有一個prototype的原型屬性(因為所有的對象都一prototype原型=龈浮)prototype屬性有自己的prototype對象叛薯,而pototype對象肯定也有自己的constuct屬性,construct屬性有自己的constuctor對象笙纤,神奇的事情要發(fā)生了耗溜,這最后一個constructor對象就是我們構(gòu)造出來的function函數(shù)本身!

這張圖片只是證明了每一個對象函數(shù)都有一個原型對象而已

再來看看網(wǎng)上流傳最廣的一張描述幫助解釋原型的一張圖片


怎么去理解呢省容?當我們新創(chuàng)建一個對象的時候抖拴,這個對象會自動生成一個prototype的屬性,這個屬性可以是一個新的對象。而原型對象中有constructor指回初始對象阿宅。當我們對這個對象進行new構(gòu)造函數(shù)的時候候衍,新構(gòu)造出來的實例可以是屬性,也可以是函數(shù)對象洒放,但是這個實例中沒有prototype原型屬性蛉鹿,取而代之的是指向原型的_proto_。這意味著原型中的屬性方法在new新實例中可以找到往湿。

new去新的構(gòu)造一個實例的時候new出來的新實例之間屬性和方法是不能共享的妖异,它的優(yōu)點和缺點都是這一點。而當有多個實例的時候领追,我們把公共的屬性方法用prototype原型去創(chuàng)建他膳,把私有的屬性方法new去創(chuàng)建。

原型在設(shè)計之初就是用來解決js中繼承的問題的绒窑。js中沒有c++和java的類棕孙,js設(shè)計之初就是借鑒了java和c++中的new方法,去構(gòu)建新的實例回论,用prototype原型鏈去彌補new方法中的不足散罕。具體的一些信息建議參考阮一峰的。他的理解很有借鑒性傀蓉。

會不會很抽象欧漱?我認為挺抽象的。不過別急葬燎,我在搜索原型及原型鏈的時候看到一道對于我們理解原型很有幫助的一道題目误甚,理解了這道題目,原型什么的題目都不是事啦谱净。但是做題和理解又不一樣窑邦,這里我推薦阮一峰的關(guān)于原型的理解;http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html

現(xiàn)在我們來看題壕探。


待我和小伙伴們講完這題冈钦,相信大部分小伙伴就可以理解了

首先我們看Foo.getName();這個我們只需要在上述中尋找相應(yīng)的函數(shù)即可。很明顯李请,我們找到是2瞧筛;

getName();這個我們也可以直接找,找到的是4导盅;

Foo().getName();的意思是Foo()中的getName()方法较幌。。白翻。小伙伴們這樣就可以很快的找到答案了唉乍炉,答案就是1;

getName();這個為什么和上面的getNmae()不一樣了呢?var getName是定義了一個變量岛琼,當沒有調(diào)用Foo函數(shù)的時候底循,線程直接進行到4,而當Foo()調(diào)用的時候衷恭,getName變量在Foo()函數(shù)中輸出的是1此叠,整個線程的getName都變成了1,4被覆蓋了随珠。

new Foo.getName();其實有沒有new沒有影響灭袁,都是2,

最后兩個窗看,new Foo().getName();和new new Foo().getName();是構(gòu)造了兩個新的getName的對象茸歧,類似于prototype創(chuàng)建。多少個new是沒有關(guān)系的显沈,所以都是3.

抱歉软瞎,關(guān)于原型我試圖去講明白,但是網(wǎng)上講的很抽象拉讯,我理解的也抽象涤浇,實在闡述不清楚。如果有能闡述清楚的希望您能指點一二魔慷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末只锭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子院尔,更是在濱河造成了極大的恐慌蜻展,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邀摆,死亡現(xiàn)場離奇詭異纵顾,居然都是意外死亡,警方通過查閱死者的電腦和手機栋盹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門施逾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人例获,你說我怎么就攤上這事音念。” “怎么了躏敢?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長整葡。 經(jīng)常有香客問我件余,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任啼器,我火速辦了婚禮旬渠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘端壳。我一直安慰自己告丢,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布损谦。 她就那樣靜靜地躺著岖免,像睡著了一般。 火紅的嫁衣襯著肌膚如雪照捡。 梳的紋絲不亂的頭發(fā)上颅湘,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音栗精,去河邊找鬼闯参。 笑死,一個胖子當著我的面吹牛悲立,可吹牛的內(nèi)容都是我干的鹿寨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼薪夕,長吁一口氣:“原來是場噩夢啊……” “哼脚草!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寥殖,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤玩讳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后嚼贡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熏纯,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年粤策,在試婚紗的時候發(fā)現(xiàn)自己被綠了樟澜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡叮盘,死狀恐怖秩贰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柔吼,我是刑警寧澤毒费,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站愈魏,受9級特大地震影響觅玻,放射性物質(zhì)發(fā)生泄漏想际。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一溪厘、第九天 我趴在偏房一處隱蔽的房頂上張望胡本。 院中可真熱鬧,春花似錦畸悬、人聲如沸侧甫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽披粟。三九已至,卻和暖如春妆档,著一層夾襖步出監(jiān)牢的瞬間僻爽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工贾惦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胸梆,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓须板,卻偏偏與公主長得像碰镜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子习瑰,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持绪颖,譯者再次奉上一點點福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠甜奄,并抽取幸運大...
    HetfieldJoe閱讀 2,987評論 4 14
  • 工廠模式類似于現(xiàn)實生活中的工廠可以產(chǎn)生大量相似的商品柠横,去做同樣的事情,實現(xiàn)同樣的效果;這時候需要使用工廠模式课兄。簡單...
    舟漁行舟閱讀 7,721評論 2 17
  • 特別說明牍氛,為便于查閱,文章轉(zhuǎn)自https://github.com/getify/You-Dont-Know-JS...
    殺破狼real閱讀 1,121評論 0 4
  • 一切皆對象 js中的一個常見運算符 typeof 以上代碼列出了 typeof 輸出的集中類型標識烟阐, 其中上面的四...
    無跡落花閱讀 1,985評論 0 5
  • 今夜帶著兒子和女兒一起觀看了《摔跤吧搬俊,爸爸》,看后蜒茄,心情久久不能平靜唉擂。這是一部由阿米爾.汗主演的傳記電影,影片講述...
    Angela_Xia閱讀 604評論 2 4