一:js物件導向程式設計
在es5中我們是這樣去寫物件導向的程式設計方式的:
function
person
(name)
;this
.setname
=function
(name);}
let p =
newperson
("張三");
p.getname()
;// 張三
p.setname
("李四");
p.getname()
;// 李四
在es6中,提供了新的方式去書寫物件導向程式設計,這種方式更加接近物件導向的書寫方式,但本身只是一種語法糖:
// 定義類
class
person
getname()
setname
(name)
}let p =
newpreson
('張三'
) p.
getname()
;// 張三
p.setname
('李四');
p.getname()
;// 李四
二:物件導向的三大特徵
三大特徵分別為:封裝,繼承和多型
1:封裝
我們平時所用的方法和類都是一種封裝,當我們在專案開發中,遇到一段功能的**在好多地方重複使用的時候,我們可以把他單獨封裝成乙個功能的方法,這樣在我們需要使用的地方直接呼叫就可以了。
2:繼承
繼承在我們的專案開發中主要使用為子類繼承父類,下面是es6繼承的書寫方法
class
father
//例項方法,通過例項物件呼叫
getname()
// 靜態方法不會被繼承,並且是通過類名去呼叫的
static
hitxiaoming()
}class
sonextends
father
}var daming =
newfather
('大明');
father.
hitxiaoming()
;//打小明
daming.
getname()
;//大明
var xiaoming =
newson
('小明',15);
xiaoming.
getname()
;//小明
三:多型
多型的具體表現為方法過載和方法重寫:
方法過載:過載是指不同的函式使用相同的函式名,但是函式的引數個數或型別不同。呼叫的時候根據函式的引數來區別不同的函式
方法重寫:重寫(也叫覆蓋)是指在派生類中重新對基類中的虛函式(注意是虛函式)重新實現。即函式名和引數都一樣,只是函式的實現體不一樣
下面我們根據上面的例子在新增乙個work的方法說明一下方法重寫:
class
father
//例項方法,通過例項物件呼叫
getname()
work()
// 靜態方法不會被繼承,並且是通過類名去呼叫的
static
hitxiaoming()
}class
sonextends
father
work()
}var daming =
newfather
('大明');
daming.
work()
// 我的工作是累死累活,賺錢養家。
var xiaoming =
newson
('小明',15);
xiaoming.
work()
;// 我的工作是好好學習,天天向上。
以上我們重寫了父類的work()方法。
三大特徵的優點:
封裝:封裝的優勢在於定義只可以在類內部進行對屬性的操作,外部無法對這些屬性指手畫腳,要想修改,也只能通過你定義的封裝方法;
繼承:繼承減少了**的冗餘,省略了很多重複**,開發者可以從父類底層定義所有子類必須有的屬性和方法,以達到耦合的目的;
多型:多型實現了方法的個性化,不同的子類根據具體狀況可以實現不同的方法,光有父類定義的方法不夠靈活,遇見特殊狀況就捉襟見肘了
js物件導向的三大特性
0x00 使用oop技術,常常要使用許多的 模組,每個模組都提供特定的功能,每個模組老師孤立的,甚至與其它的模組完全獨立,這種模組化的程式設計方法大大的提供了 實現的多樣性,大大增加了 的重用性。js並不是直接的oop語言,但是可以通過模擬的方式做到其它很多oop語言才能做到的事情,如繼承 多型 封...
物件導向三大特性
什麼是物件導向呢?之前我們做一件事的時候,常常是確定,先幹什麼,然後怎麼做,最後可以完事了。其實我們不妨這麼想一下,我們做事的時候是可以這樣的 這件事中涉及了什麼物件角色?如果我要把這件事做成那麼就需要物件之間是如何協作的?第二種方法,就是今天說的物件導向的方法了,好處正在慢慢體會。今天我想說的物件...
物件導向三大特性
0x00 嘮嘮叨叨 只是做乙個概念的記錄 0x01 物件導向的三大特性 n 封裝 把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。類將成員變數和成員函式封裝在類的內部,根據需要設定訪問許可權,通過成員函式管理內部狀態。n 繼承 繼承所表達的是類...