javascript
如何更加简单的理解JS中的原型原型链概念
前面寫了很多關(guān)于前端經(jīng)驗(yàn)之談,今天就來點(diǎn)干貨吧。這篇文章將會介紹原型這個概念
原型是整個Javascript中比較重要的概念,如果面向?qū)ο笙胍獙W(xué)好,那么這個東西你必須要了解,不然后面的原型鏈,繼承,多態(tài),設(shè)計模式你根本沒得完。
但是很多人,尤其是自學(xué)的人,可能翻閱了各種資料,說不定也看過不少人的博客吧,我這篇文章可能你可能會懂,也可能看不懂。那也沒辦法,本身這個了解概念的過程本身就是最難也是最沒有耐心干的一件事情。所以我盡量講這篇文章寫的通俗易懂,忘大家理解。
首先,原型是指構(gòu)造函數(shù)中的一個屬性,叫做prototype。這個屬性常常被用來對構(gòu)造函數(shù)方法的擴(kuò)展;
//構(gòu)造函數(shù)fn funtion fn(){}//為構(gòu)造函數(shù)添加一個實(shí)例方法 fn.c.show = function(){console.log("這是一個實(shí)例方法"); }//實(shí)例化一個foo對象var foo = new fn();//調(diào)用原型方法 foo.show();//這是一個實(shí)例方法
看到這里,可能很多同學(xué)會發(fā)現(xiàn),這個原型方法其實(shí)也可以在實(shí)例化之后自定義一個方法
function fn(){}var foo = new fn();foo.show = function(){console.log("這是一個自定義方法"); }foo.show();//這是一個自定義方法這當(dāng)然可以,從語法上也是沒有錯的。但是,站在面向?qū)ο蟮慕嵌热タ紤],我們是要先構(gòu)建一個構(gòu)造函數(shù),這個函數(shù)也就是我們平時玩游戲創(chuàng)建人物的過程,在這個過程中,這個人物是沒有創(chuàng)建的。也就是說,這個人物實(shí)例是不存在的。那么原型的意義體現(xiàn)出來了。它可以在你構(gòu)造階段就可以添加方法,包括殺怪,升級這些功能都可以在這里擴(kuò)展的,等我設(shè)置人物屬性方法完畢以后我們點(diǎn)擊創(chuàng)建角色,是不是就有一個人物對象存在啦。這樣一比喻,腦袋里面有沒有一點(diǎn)模樣出來了呢!呵呵!
那么什么又是原型鏈了,首先你得知道這個屬性,叫做_proto_;
這個屬性是隱式的,所以我們是無法訪問的。所以各位小伙伴你去訪問的時候肯定是underfind。
不過沒關(guān)系,既然這個東西存在我還是要說明下。這個屬性是屬于實(shí)例對象的。也就是上面例子中foo才擁有的屬性,而且只要是對象,都會擁有這個屬性的。
foo._proto_指向的誰了。是構(gòu)造函數(shù)的原型方法,也就是fn.prototype。那么之前我說過,只要是對象都有._proto_屬性,那么fn.prototype返回的是一個對象還是其他的?沒關(guān)系,我們可以實(shí)驗(yàn)一下
typeof fn.protototype //object這就有意思了,那么fn.protototype的_proto_屬性又指向誰了?如果你有父類,那么就指向父類的原型,那么父類的原型又指向誰了?這個反復(fù)直到Object對象的原型屬性為止,這一個過程就構(gòu)成了我們的原型鏈,一整條關(guān)系鏈。而這個關(guān)系的核心就是我們的原型;
不知道這么講你懂了沒有。我當(dāng)初就是這么去理解的,一開始肯定很懵逼,但是把思路理清楚還是有點(diǎn)頭緒的吧。
foo._proto_ >> fn.prototype fn.prototype._proto_ >> Object.protottype //Object的原型是整個原型鏈的最頂端
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/JIANGCHEN520/p/6939335.html
總結(jié)
以上是生活随笔為你收集整理的如何更加简单的理解JS中的原型原型链概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机客户端测试点(全)
- 下一篇: LintCode Python 简单级题