再和“面向對象”談戀愛-面向對象編程概念(三)-創(chuàng)新互聯(lián)

通過前兩篇文章,我們了解了對象的概念以及面向對象里的相關概念等知識,那前面說了對象分類里的前兩種,這篇文章要詳細去說第三種“自定義對象”,那真正的好戲這就來了!

成都創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,先為龍勝等服務建站,龍勝等地企業(yè),進行企業(yè)商務咨詢服務。為龍勝企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。

面向對象編程概念

面向對象編程的概念非常早就有了,大多數(shù)的傳統(tǒng)語言都是面向對象編程語言,如C++、Java等。ECMAScript花了大量的精力編寫了一堆內置對象,這是為什么呢?JavaScript的設計者其實也想向面向對象的語言靠齊。說到底面向對象才是程序語言的根本。

前面說過在JavaScript里對象分為三種,全局對象、內置對象、自定義對象。其實面向對象編程說的就是自定義對象。JavaScript給了我們很多內置對象,但是這些對象也不能夠滿足我們的需求。所以我們就需要自己寫一些對象了。那面向對象是用來干嘛的?就是用來實現(xiàn)一個個功能的。換句話說,我們以后實現(xiàn)的每一個功能都是一個對象,這個對象的語法要像內置對象的語法一樣,再者說就是模仿內置對象實現(xiàn)各種功能,這就叫面向對象編程!

面向過程與面向對象

面向過程的程序,沒有屬性與方法的概念,所有的東西都是單獨寫一套,無法擴展。面向對象的程序是以對象為準則,一個功能就是一個對象,把變量與函數(shù)做為這個對象的屬性與方法去用,擴展性非常高。

面向過程編程

//所有的屬性都存在變量里
const lis=document.querySelectorAll("li");
const leftBtn=document.querySelector(".leftBtn");
const rightBtn=document.querySelector(".leftBtn");

//所有的功能都是獨立出來的函數(shù)
function changeCircle(){
    //...
}
function move(){
    //....
}

//用的時候,需要去調對應的函數(shù)
leftBtn.onclick=function(){
    changeCircle();
    move();
}

面向對象編程

function Pic(){
    //所有的變量都變成了對象的屬性
    this.lis=document.querySelectorAll("li");
    this.leftBtn=document.querySelector(".leftBtn");
    this.rightBtn=document.querySelector(".leftBtn");

    const This=this;    //存一下this,為了在函數(shù)里面用
    this.leftBtn.onclick=function(){
        This.changeCircle();
        This.move();
    }
}

//所有的功能都變成了對象的方法
Pic.prototype.changeCircle=function(){
//...
}
Pic.prototype.move=function(){
//...
};

//用的時候只需new一個就可以
const showImg=new Pic();

<br />
再比如Date對象,它是用來操作日期的。有很多的屬性與方法。那JavaScript里并沒有一個日歷對象吧。我們可以寫一個日歷對象,它就是專門用來操作日歷的。比如叫calendar,那我按照內置對象的語法實現(xiàn)一個calendar對象,里面也有很多屬性與方法,new一個就是一個實際的日歷。那實現(xiàn)這個calendar對象就叫面向對象編程

//內置對象
const date=new Date();
date.getMonth();    //5

//自定義對象
const Calendar=function(){
    //...
}
const calendar=new Calendar();
calendar.getLunar();    //獲取陰歷

ECMAScript 5里的面向對象編程

JavaScript中的面向對象是通過構造函數(shù)完成的

大家經常聽到一個詞叫“類”,在面試的時候、看面試題的時候,都會遇到一個“請解釋一下類的概念”。每看到這種題的時候,我都會有種罵娘的沖動。解釋你妹呀,ES5中壓根就沒類這個概念。我估計出這種題的人都是搞后端開發(fā)的。ES5中沒有類的概念,只有構造函數(shù)。

我們經常會用下面的這個例子來演示一個面向對象編程的步驟,而這個正是ES5當中寫面向對象的過程

//構造函數(shù)
function Person(name,age){
    this.name=name; //把屬性添加到this上
    this.age=age;
}

//把方法添加到原型上
Person.prototype.showName=function(){
    console.log(this.name);
}
console.dir(Person);

//實例
const p1=new Person('kaivon',18);
p1.showName();

我在這里要黑一下ES5的面向對象編程,上面的這種形式嚴格來講不叫面向對象的程序。如果你跟一個Java程序員說:“哎,搞Java的,看看我們JS寫的面向對象,是不是倍兒棒!”。我估計他會噴你一臉血,這他媽也能叫面向對象,你是猴子請來的逗逼么,過來搞笑的么?連類都沒有,能稱之為面向對象,你真是隨心所欲呀~ 而你還一臉無辜的說:“難道Person不是類么?”。ES5里并沒有類的概念,所以嚴格上來講這是個假的面向對象

ECMAScript 6里的面向對象編程

現(xiàn)在好了,ES6終于聽到別人鄙視我們了,給我們提供了類這個概念,其實是向傳統(tǒng)語言更靠齊了。前端終于可以揚眉吐氣了,你可以昂首挺胸地說JavaScript里有類了!但是ES6提供的類其實就是個語法糖,何為語法糖?就是把復雜的東西包裝了一下,變得簡單的,內部原理還是通過構造函數(shù)來完成的(就是穿了一個馬甲)。那不管怎么說,他偷也好搶也好現(xiàn)在就是有了,就算是進步了!

有了類之后呢,生成實例名義上就不通過構造函數(shù)了而通過類(內部原理還是通過構造函數(shù),只是讓我們寫起來,理解起來簡單了)

class Person{   //聲明一個類
    constructor(name,age){  //構造函數(shù)
        this.name=name;
        this.age=age;
    }
    showName(){ //這里的方法最終會放到原型上
        console.log(this.name);
    }
}
console.dir(Person);

//生成實例
const p1=new Person('kaivon',18);
p1.showName();

下一篇詳細介紹ES6里面的class概念

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網(wǎng)站名稱:再和“面向對象”談戀愛-面向對象編程概念(三)-創(chuàng)新互聯(lián)
URL標題:http://muchs.cn/article36/higpg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)頁設計公司、微信小程序全網(wǎng)營銷推廣、網(wǎng)站設計、品牌網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管