錯(cuò)誤之處,歡迎指正。
1. 面向?qū)ο蠛兔嫦蜻^程
以將大象放進(jìn)冰箱舉例:
- 面向過程:思考的切入點(diǎn)是功能的步驟。
function openDoor() {} //開門
function elephantIn() {} //放進(jìn)冰箱
function closeDoor() {} //關(guān)門
- 面向?qū)ο螅核伎嫉那腥朦c(diǎn)是對(duì)象的劃分。
function Elephant() {} //構(gòu)造函數(shù)大象
function Fridge() {} //構(gòu)造函數(shù)冰箱
Fridge.prototype.openDoor = function () {} //開冰箱門方法
Fridge.prototype.closeDoor = function () {} //關(guān)冰箱門方法
Fridge.prototype.in = function () {} //放入冰箱方法
const f = new Fridge(); //創(chuàng)建一個(gè)冰箱
f.openDoor(); //打開該冰箱的門
const e = new Elephant(); //創(chuàng)建一個(gè)大象
f.in(e); //將大象放入冰箱
f.closeDoor(); //關(guān)閉冰箱門
從上面代碼可以看出,面向過程的寫法更為簡潔,但是不利于后期的維護(hù)修改;相反,使用面向?qū)ο蟮姆椒?,只需要去關(guān)注該對(duì)象上的方法,對(duì)于后期維護(hù),只需要在方法上做手腳。沒有絕對(duì)的好與壞,需要依照需求來決定選取哪種方法。
2. 構(gòu)造函數(shù)
- 傳統(tǒng)的構(gòu)造函數(shù)屬性和方法定義分離。
- 原型上的屬性會(huì)被枚舉。
- 構(gòu)造函數(shù)依然可以當(dāng)作普通函數(shù)使用。
3. 類
在面向?qū)ο笫骄幊讨?,把?duì)象的所有成員定義稱之為一個(gè)類。
class Animal {
constructor(name, age){
this.name = name;
this.age = age;
}
print() {
console.log(this.name);
console.log(this.age);
}
}
-
class不存在變量提升,存放于暫時(shí)性死區(qū)。 -
class里的方法都不可枚舉。 -
class必須使用new調(diào)用。 -
static關(guān)鍵字;靜態(tài)成員,函數(shù)的本身是對(duì)象,函數(shù)上面本身的成員就是靜態(tài)成員,不能被實(shí)例訪問到,只能通過構(gòu)造函數(shù)本身使用。