聽說物件導向很難很複雜的樣子?其實並不難,慢慢由淺入深理解就好了。下面我來說說我對物件導向的認識吧!
比如說我們要做一道菜,那麼步驟應該是:
1. 買菜(去哪買?買多少?買什麼?)
2. 洗菜切菜(怎麼切?片?條?塊?)
3. ……
面向過程:關注的是具體實現的過程
物件導向:關注的是特徵(具有的特性),注意:物件導向不是沒有過程,而是不關注過程,就跟個領導一樣,我不管你菜**買,怎麼切,怎麼做,我只要你把一道菜放我面前就是。
兩者的本質上都是函式的乙個封裝。所以說封裝思想很重要!
在js中物件是一種復合的資料型別。
物件的建立有兩種方式
1. new object()
var obj1 = new object();
2. {}
var obj2 = {};
通過上述的兩種方式,都可以建立乙個空的物件
先來看看物件的建立
function people(name, gender, age)//基於書寫規範,一般都以大寫字母開頭,用來區分普通的函式封裝。
當我們通過new的方式去呼叫執行乙個函式的時候
* 1
. 在函式內部自動建立乙個空的物件
* 2
. 把該函式的this指向該物件
* 3
. 函式執行完成自動返回該物件
所以如同上面一樣,建立乙個物件本質上我們是自動省略了那兩行注釋的。
得到乙個people物件,我們可以呼叫它。
var xm = new people('小明', '男', 18);//我們建立了乙個叫小明的人的物件,並且給他取了名字,定了性別,年齡。
people被稱為建構函式,基於它我們創造了小明這個物件例項。
建構函式的注意事項:
function eat()function people(name, gender, age)
this.eat =eat;
}
* 類:型別,對具有相同特徵的物件的抽象描述建構函式 <-> 類
* 物件:由類建立出來的具體物件(例項),也稱為例項化物件
* 建構函式:類中用來建立物件的具體函式,類建立物件的時候呼叫的初始化函式
物件的一些特徵所擁有的值其實也是一樣,那麼如果每個物件對這樣的相同值的特徵也是獨立儲存乙份的話,就會照成資源浪費(記憶體占用)
所以把相同特徵都寫在建構函式的原型上,每個例項物件都能繼承到它。people.prototype.eat = function ()
xm.eat()執行的時候,會去查詢xm這個物件本身的__proto__屬性上有沒有eat方法,沒有的話就去找它的建構函式people的原型上有沒有這個方法,找到了就執行。
所以執行結果就能列印出:狼吞虎嚥。
當我們去呼叫乙個物件下的屬性或方法的時候,物件首先會在自身上查詢是否該屬性或方法,如果有則呼叫,如果沒有,則會查詢自己的__proto__屬性上是否有給屬性或方法
為了使物件共有的特徵方法維護和管理,所以有一種專門來管理和維護這些共同特徵的方法(手段)
* 當乙個函式被建立的時候,該函式下自動會有一些屬性(函式也是物件),其中有乙個屬性,名稱:prototype,他的值是乙個物件,我們通常就把建構函式建立的物件所擁有的共同特徵儲存在這些物件的建構函式的prototype屬性下
** 當乙個物件被建立的時候,物件自動會建立乙個屬性,名稱:__proto__,該屬性也是乙個物件,其實該屬性就是該物件的建構函式的prototype
** 當我們去呼叫乙個物件下的屬性或方法的時候,物件首先會在自身上查詢是否該屬性或方法,如果有則呼叫,如果沒有,則會查詢自己的__proto__屬性上是否有給屬性或方法
剛接觸物件導向,最重要或者說最難理解的是它的原型鏈。這個問題,下一節會詳細去說的。
物件導向 初識物件導向
面向過程思想 步驟清晰簡單,第一步做什麼,第二步做什麼.面向過程適合處理一些較為簡單的問題 物件導向思想 物以類聚,分類的思維模式,思考問題首先會解決問題需要分哪些類,然後對這些類進行單獨思考,最後才是對某個分類下的細節進行面向過程的思索 物件導向適合處理複雜的問題,適合處理需要多人協作的問題 對於...
初識物件導向
1.例項化 2.init 方法 3.類方法和靜態方法 4.訪問控制 5.屬性裝飾器 在python中,用變數表示特徵,用函式表示技能,因而具有相同特徵和技能的一類事物就是 類 物件是則是這一類事物中具體的乙個.三要素類 class 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所...
初識物件導向
開始接觸物件導向程式設計,學習時間不長,寫下點自己目前的理解,總結梳理下最近的學習成果。一切皆是物件,物件導向體系中有這麼一句經典的話。我認為可以這麼理解,物件導向程式設計的關鍵步驟是如何將我們所希望實現的功能抽象為計算機可實現的模型,這些模型我們可以稱之為物件。當我們把具有相同特點的多個物件進一步...