淺談Js原型的理解

1、js中的原型毫無疑問一個難點,學習若是不深刻很容易就暈了! 在參考了多方面的資料後,發現解釋都太過專業,對於不少尚未接觸過面向對象 語言的小白來講,有理解不了裏面的專有名詞!若是你沒學過c++或者Java之類的更接觸底層的語言,那就不要太深究,理解會用天然能夠了,當接觸到更多語言時慢慢的會理解愈來愈深入! 下面我就舉例分享一下prototype的概念!知道對於初學者知道這些就足夠了!

 分析一下,上面這個例子!咱們能夠知道 People的類型是一個對象! 按照javascript的說法,function定義的這個Person就是一個Object(對象),並且仍是一個很特殊的對象,這個使用function定義的對象與使用new操做符生成的對象之間有一個重要的區別。這個區別就是function定義的對象有一個prototype屬性,使用new生成的對象就沒有這個prototype屬性,咱們通常稱爲普通對象! 咱們須要理解記憶如下的邏輯順序: Person是一個對象,它有一個prototype的原型屬性(由於全部的對象都一prototype原型!)prototype屬性有本身的prototype對象,而pototype對象確定也有本身的constuct屬性,construct屬性有本身的constuctor對象,神奇的事情要發生了,這最後一個constructor對象就是咱們構造出來的function函數自己! 2、這樣繞人的邏輯,總想一探究竟,要記得這是一種規定的邏輯思惟,咱們要作的是慢慢接受這種邏輯思惟!咱們不理論研究,用實例說話:javascript


 

3、下面咱們難免有了疑問,學這麼繞的東西幹什麼,它給咱們最實際的用處就是咱們能夠用原型來建立對象的屬性和方法!咱們不用它不也是能夠建立屬性和方法!這裏是有區別的,既然不同就有存在的價值! 咱們能夠經過給原型添加屬性和方法來給給對象添加屬性或方法! Hero.prototype.name; Hero.prototype.sayMe = function(){"添加對象的方法其實就是添加函數"} 讓咱們再深一步:當咱們給對象添加了同名的屬性或方法時會發生什麼?java


 

咱們驗證了這個例子獲得獲得了一些結論: 當函數對象自己的屬性或方法與原型的屬性或方法同名的時候: 一、默認調用的是函數對象自己的屬性或方法. 二、經過原型增長的屬性或方法的確是存在的. 三、函數對象自己的屬性或方法的優先級要高於原型的屬性或方法. c++

相關文章
相關標籤/搜索