面向過(guò)程編程(POP):
定義:分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候再一個(gè)一個(gè)的調(diào)用。即先分析好步驟然后按步驟解決問(wèn)題。
面向?qū)ο缶幊蹋∣OP):
定義:把事務(wù)分解成一個(gè)個(gè)對(duì)象,然后由各對(duì)象之間分工與合作。是以對(duì)象功能來(lái)劃分問(wèn)題,而不是步驟。每一個(gè)對(duì)象都是功能中心,具有明確分工。
面向?qū)ο蟮奶匦裕?/h4>
- 封裝性
- 繼承性
- 多態(tài)性
面向?qū)ο蟮乃季S特點(diǎn):
1、抽?。ǔ橄螅?duì)象共用的屬性和行為組織(封裝)成一個(gè)類(lèi)(模板)。
2、對(duì)類(lèi)進(jìn)行實(shí)例化,獲取類(lèi)的對(duì)象。
面向?qū)ο缶幊炭紤]的是有哪些對(duì)象,按照面向多想的思維特點(diǎn),不斷的創(chuàng)建對(duì)象,使用對(duì)象,指揮對(duì)象做事情。
對(duì)象是由屬性和方法組成的:
- 屬性:事務(wù)的特征,在對(duì)象中用屬性來(lái)表示(常用名詞)
- 方法:事務(wù)的行為,在對(duì)象中用方法來(lái)表示(常用動(dòng)詞)
類(lèi) class :
類(lèi)抽象了對(duì)象的公共部分,它泛指某一大類(lèi)(class)
對(duì)象特指某一個(gè),通過(guò)類(lèi)比實(shí)例化一個(gè)具體的對(duì)象
創(chuàng)建類(lèi):
語(yǔ)法:
class name {
//class body
}
例:
class car {}
創(chuàng)建實(shí)例:
語(yǔ)法:
let xx = new name()
例: new car()
注意:類(lèi)必須使用 new 實(shí)例化對(duì)象
類(lèi)的 constructor 構(gòu)造函數(shù):
constructor() 方法是類(lèi)的構(gòu)造函數(shù)(默認(rèn)方法),用于傳遞參數(shù),返回實(shí)例對(duì)象,通過(guò) new 命令生成對(duì)象實(shí)例時(shí),自動(dòng)調(diào)用該方法。如果沒(méi)有顯式定義,類(lèi)內(nèi)部會(huì)自動(dòng)創(chuàng)建一個(gè) constructor()
例:
//1、創(chuàng)建類(lèi) class,創(chuàng)建一個(gè)汽車(chē)類(lèi)
class Car{
constructor(uname,color){
this.uname = uname
this.color = color
}
}
//2、利用類(lèi)創(chuàng)建對(duì)象
let bmw = new car('寶馬','red')
let benz = new car('奔馳','black')
注意點(diǎn):
1、通過(guò) class 關(guān)鍵字創(chuàng)建類(lèi),類(lèi)名習(xí)慣性定義首字母大寫(xiě)
2、類(lèi)里面有個(gè) constructor 函數(shù),可以接受傳遞過(guò)來(lái)的參數(shù),同時(shí)返回實(shí)例對(duì)象。
3、只要在new 生成實(shí)例時(shí),就會(huì)自動(dòng)調(diào)用 constructor函數(shù),如果不寫(xiě)這個(gè)函數(shù),類(lèi)也會(huì)自動(dòng)生成這個(gè)函數(shù)
4、生成實(shí)例時(shí)必須寫(xiě) new ,不能省略
5、語(yǔ)法規(guī)范:創(chuàng)建類(lèi),類(lèi)名后面不要加小括號(hào)。生成實(shí)例,實(shí)例后面要加小括號(hào)。構(gòu)造函數(shù)不需要寫(xiě) function。
類(lèi)中添加方法
class Car{
constructor(uname,color){
this.uname = uname
this.color = color
}
run(){
console.log('添加了run方法')
}
}
1、類(lèi)里面所有的函數(shù)都不需要寫(xiě)function
2、多個(gè)函數(shù)方法之間不需要天劍逗號(hào)分隔。
類(lèi)的繼承
extends 關(guān)鍵字 :
extends關(guān)鍵字讓子類(lèi)可以繼承父類(lèi)的一些屬性和方法。
語(yǔ)法:
class Father {
//父類(lèi)
}
class Son extends Father{
//子類(lèi)繼承父類(lèi)
//關(guān)鍵詞: extends
}
super 關(guān)鍵字:
super 關(guān)鍵字用于訪問(wèn)和調(diào)用對(duì)象父類(lèi)上的函數(shù),可以調(diào)用父類(lèi)的構(gòu)造函數(shù),也可以調(diào)用父類(lèi)的普通函數(shù)。
class Father{
constructor(x,y){
this.x = x
this.y = y
}
sum(){
console.log(this.x + this.y)
}
}
class Son extends Father{
constructor(x,y){
super(x,y) //調(diào)用父類(lèi)中的構(gòu)造函數(shù)
}
}
let son = new Son(1,2)
son.sum() //打印出 3
父類(lèi)中的函數(shù)必須使用父類(lèi) constructor 中的數(shù)據(jù)
使用 super 關(guān)鍵字就可以把子類(lèi) constructor 中的數(shù)據(jù)傳遞給父類(lèi)了
注意:在子類(lèi)的構(gòu)造函數(shù)中利用super 關(guān)鍵字調(diào)用父類(lèi)的構(gòu)造函數(shù)時(shí),super必須在子類(lèi) this 之前調(diào)用。(即:必須先調(diào)用父類(lèi)的構(gòu)造方法,再調(diào)用子類(lèi)的構(gòu)造方法)
繼承中的特點(diǎn):
1、繼承中屬性或方法的查找原則: 就近原則
2、繼承中,如果實(shí)例化子類(lèi)輸出一個(gè)方法,先看子類(lèi)有沒(méi)有這個(gè)方法,如果有就執(zhí)行子類(lèi)。
3、繼承中,如果子類(lèi)里面沒(méi)有,就去查找父類(lèi)有沒(méi)有這個(gè)方法。如果有,就執(zhí)行父類(lèi)的這個(gè)方法(就近原則)
ES6中類(lèi)和對(duì)象在使用時(shí)的三個(gè)注意點(diǎn):
1、在 ES6 中,類(lèi)沒(méi)有變量提升,所以必須先定義類(lèi),才能通過(guò)類(lèi)實(shí)例化對(duì)象。
2、類(lèi)里面的共有屬性和方法一定要加 this 來(lái)使用。
3、類(lèi)里面的 this 指向問(wèn)題:
-
constructor中的this指向的是創(chuàng)建的實(shí)例對(duì)象 - 方法中的
this指向的是這個(gè)方法的調(diào)用者