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