千鋒教育Kerwin系列前端教程1000集(適合前端0基礎(chǔ),h5(html5)/

1.面向過程編程思想和面向?qū)ο缶幊趟枷氲膮^(qū)別
01.面向過程編程:強(qiáng)調(diào)步驟順序
程序 = 算法 + 語法;
面向過程編程思想的缺陷:
a.隨著問題規(guī)模的增加,代碼逐漸難以控制
b.復(fù)用性很差,只能復(fù)用函數(shù)
02.面向?qū)ο蟮木幊蹋?/p>
強(qiáng)調(diào)對象(最后再考慮過程,但肯定不是拋棄了過程)
程序 = 對象1 + 對象2 + .... + 對象n
對象:萬物皆為對象
2.類和對象的概念
屬性-----抽象時(shí)的名詞
方法-----抽象時(shí)的動(dòng)詞
對每一個(gè)對象進(jìn)行抽象
抽象-----對事物加以描述的過程
類:擁有相同屬性和行為的對下那個(gè)的集合(模板)
對象:類的實(shí)例化(強(qiáng)調(diào)真實(shí)存在且唯一性)
目標(biāo):為了創(chuàng)建自定義類型
3.ES5方法創(chuàng)建類
JS運(yùn)用了面向?qū)ο蟮乃枷?,但是卻沒有類的語法
解決方案:用函數(shù)模擬類,被當(dāng)作類的函數(shù)本質(zhì)是構(gòu)造函數(shù)
this:
a.與事件體連用,代表觸發(fā)該事件的元素
b.與普通函數(shù)連用,代表調(diào)用改進(jìn)函數(shù)的對象
c.與箭頭函數(shù)連用,代表其父元素的前綴
d.與構(gòu)造方法連用,代表new出來的對象
普通函數(shù)與構(gòu)造函數(shù)的區(qū)別:
a.習(xí)慣上構(gòu)造函數(shù)首字母大寫
b.構(gòu)造函數(shù)必須和new連用
c.構(gòu)造函數(shù)不能添加return,因?yàn)樽詣?dòng)返回的是地址
4.ES6創(chuàng)建類
class 類名 {
構(gòu)造函數(shù)---new時(shí)調(diào)用的函數(shù)
constructor(參數(shù)列表){
}
去掉function的普通函數(shù)
}
5.類的組合
組合:一個(gè)類的成員屬性是另一個(gè)類的對象
6.小明問題案例
小明手里有兩張牌,左手紅桃A,右手黑桃K
問:當(dāng)小明交換左右手的牌后,兩只手分別剩下什么牌?
面向?qū)ο蠼鉀Q問題的思想:
a.找出該問題有幾個(gè)對象
對象:小明
小明左手 小明右手
紅桃A 黑桃K
b.根據(jù)對象抽象出其睡醒和方法創(chuàng)建類
person:leftHand rightHand
showCard() swapCard()
Hand:card
Card: color num
c.各個(gè)對象按順序執(zhí)行
class Card{
constructor(color,num){
this.color = color;
this.num = num;
}
}
class Hand{
constructor(card){
this.card = card;
}
}
class Person{
constructor(lh,rh){
this.lh = lh;
this.rh = rh;
}
showCard(){
console.log(this.lh.card.color,this.lh.card.num);
console.log(this.rh.card.color,this.rh.card.num);
}
swapCard(){
[this.lh.card,this.rh.card] = [this.rh.card,this.lh.card];
}
}
let card1 = new Card("?","A");
let card2 = new Card("?","K");
let lh = new Hand(card1);
let rh = new Hand(card2);
let xiaoming = new Person(lh,rh);
xiaoming.showCard();
xiaoming.swapCard();
xiaoming.showCard();