面向?qū)ο缶幊?/h1>
?面向?qū)ο缶幊蘋OM(Object-oriented programming)其實(shí)已經(jīng)是一種在編程界非常非常普及的概念,它的基本思想是:在程序里,通過使用對(duì)象去構(gòu)建現(xiàn)實(shí)世界的模型殿如,并對(duì)象把原本很難(或不可)能被使用的功能,簡單化并提供出來棍潘,以供訪問裕偿;
?簡單來說,在絕大部分編程語言中爪幻,面向?qū)ο缶幊痰膶?shí)現(xiàn)方式是通過“類(class)”來實(shí)現(xiàn)的菱皆,“類”實(shí)質(zhì)上就是一種使用代碼來對(duì)“對(duì)象”進(jìn)行的一種抽象概括。舉一個(gè)簡單的例子挨稿,如果我們面向的對(duì)象是一個(gè)學(xué)生仇轻,那么我們對(duì)學(xué)生構(gòu)建的這個(gè)“類”就有一定的屬性和方法,學(xué)生的姓名奶甘,年齡這些就是這個(gè)類的屬性篷店,代表學(xué)生的一些行為、相關(guān)的業(yè)務(wù)邏輯就是類的方法臭家。如果我們用Python來寫這樣一個(gè)關(guān)于學(xué)生的類疲陕,那么它就是下面這樣的:
class Student:
#Python中通常將屬性寫在構(gòu)造函數(shù)__init__(self[,prop...])里
def __init__(self,name,age,grade):
self.name=name
self.age=age
self.grade=grade
#定義類的方法
def sayHi():
print("Hello!,I'm "+self.name+".Nice to meet you!")
def upgrade():
self.grade+=1
JavaScript里的面向?qū)ο缶幊?/h1>
在MDN關(guān)于JS面向?qū)ο缶幊痰恼f法中,原話是這樣的
有些人認(rèn)為 JavaScript 不是真正的面向?qū)ο蟮恼Z言钉赁,比如它沒有像許多面向?qū)ο蟮恼Z言一樣有用于創(chuàng)建class類的聲明蹄殃。JavaScript 用一種稱為構(gòu)建函數(shù)的特殊函數(shù)來定義對(duì)象和它們的特征。
其實(shí)在ES6中JS新增了class關(guān)鍵字你踩,本文后面會(huì)提到诅岩。
那么JS是怎么用構(gòu)建函數(shù)(構(gòu)建函數(shù)和構(gòu)造函數(shù)是一回事)來創(chuàng)建類的,還是上面學(xué)生的類的例子
function Student(name,age,grade){
this.name=name;
this.age=age;
this.grade=grade;
this.sayHi=function(){
console.log("Hello!,I'm "+this.name+".Nice to meet you!");
}
this.upgrade=function(){
this.grade+=1;
}
}
注意带膜,構(gòu)造函數(shù)和普通函數(shù)的區(qū)別在于普通函數(shù)可以直接調(diào)用吩谦,而構(gòu)造函數(shù)是需要用new關(guān)鍵字(如new Student())的,而且構(gòu)造函數(shù)體內(nèi)一定會(huì)有this關(guān)鍵字膝藕,使用構(gòu)造函數(shù)的好處是可以復(fù)用它來不停創(chuàng)建新的實(shí)例逮京,如果我們只是單純的創(chuàng)建一個(gè)實(shí)例化對(duì)象的話,我們可以直接通過Object()來new一個(gè)對(duì)象(其實(shí)不用Object也可以),然后添加屬性和方法即可
var Student1=new Object();
Student1.age=23;//age屬性不存在時(shí)這個(gè)語句可以直接為對(duì)象添加age屬性
Student.name='John Snow';
Student.grade=4;
Student.sayHi=function(){
console.log("Hello!,I'm "+this.name+".Nice to meet you!");
}
也可以向Object()方法里傳入一個(gè)對(duì)象來創(chuàng)建對(duì)象(有種套娃的感覺)
var Student1=new Object({
age:23,
name:'John Snow',
grade:4,
sayHi:function(){
console.log("Hello!,I'm "+this.name+".Nice to meet you!");
}
});
JS里的class
JS的class關(guān)鍵字其實(shí)是ES6提出的束莫,ES6提出的這個(gè)JS class關(guān)鍵字其實(shí)將上面提到的構(gòu)造函數(shù)以class里的constructor實(shí)現(xiàn)了而已(就是換了個(gè)名字)
class Student{
constructor(name,age,grade) {
this.name=name;
this.age=age;
this.grade=grade
}
sayHi() {
console.log("Hello!,I'm "+this.name+".Nice to meet you!");
}
}