js算不算面向?qū)ο蟮恼Z(yǔ)言?
網(wǎng)友解答: 謝邀,js肯定算面向?qū)ο笳Z(yǔ)言。有句話說(shuō)得好,“JavaScript里一切皆對(duì)象”。如果不確定,那我們首先明確下什么是面向?qū)ο?,有三個(gè)核心概念。一是一切事物皆為對(duì)象;二是對(duì)象具
謝邀,js肯定算面向?qū)ο笳Z(yǔ)言。有句話說(shuō)得好,“JavaScript里一切皆對(duì)象”。如果不確定,那我們首先明確下什么是面向?qū)ο?,有三個(gè)核心概念。
一是一切事物皆為對(duì)象;
二是對(duì)象具有封裝和繼承特性;
三是對(duì)象之間使用消息通信,各自存在信息隱藏。
我嘗試通過(guò)以下幾個(gè)例子來(lái)看Js是否都滿足三個(gè)特性。
封裝在一些靜態(tài)類型的語(yǔ)言如java中,本身語(yǔ)法就提供了這些功能。js當(dāng)中只能依靠變量的作用域來(lái)實(shí)現(xiàn)封裝的特性,并且只能模擬出public和private兩種特性。
繼承雖然在es6中也有extend以及class,但其本質(zhì)仍實(shí)現(xiàn)仍是基于原型機(jī)制。雖然原型繼承方式寫法很多,但是理解原型鏈機(jī)制比較重要,關(guān)鍵其實(shí)就是理解prototype和__prototype__。
多態(tài)多態(tài)其實(shí)就是把做的內(nèi)容和誰(shuí)去做分開。因?yàn)閖s是動(dòng)態(tài)語(yǔ)言,多態(tài)性本身就有。下面這個(gè)例子就說(shuō)明了,一個(gè)動(dòng)物能否實(shí)現(xiàn)叫聲,只取決于makeSound,而不針對(duì)某種類型的對(duì)象。
如果你對(duì)學(xué)習(xí)人工智能和科技新聞感興趣,可以訂閱我的酷米號(hào),我會(huì)在這里發(fā)布所有與算法、機(jī)器學(xué)習(xí)以及深度學(xué)習(xí)有關(guān)的有趣文章。偶爾也回答有趣的問題,有問題可隨時(shí)在評(píng)論區(qū)回復(fù)和討論,看到即回。
(碼字不易,若文章對(duì)你幫助請(qǐng)點(diǎn)贊支持~)
網(wǎng)友解答:我學(xué)js時(shí)間不長(zhǎng)不短,還算湊合吧。剛開始聽到的是js是弱類型語(yǔ)言,不能面向?qū)ο缶幊獭?/p>
到后來(lái)接觸其他的編程語(yǔ)言之后有些明白了,面向?qū)ο蟛皇悄膫€(gè)語(yǔ)言所特有的屬性,而是一種思想,通俗些說(shuō)就是把一個(gè)項(xiàng)目進(jìn)行模塊兒化。面向?qū)ο蟮娜齻€(gè)特性,封裝,繼承,多態(tài),從這三個(gè)方面來(lái)看,js是屬于面向?qū)ο蟮木幊陶Z(yǔ)言范疇的。
但在js中的繼承并沒有其他語(yǔ)言中的那么繁瑣,諸如c++中的公有,私有,保護(hù)什么的,所以說(shuō)js是嚴(yán)謹(jǐn)?shù)拿嫦驅(qū)ο蟮木幊陶Z(yǔ)言又感覺不太合適,但在項(xiàng)目開發(fā)中是可以采用面向?qū)ο蟮乃枷雭?lái)進(jìn)行對(duì)js編程的。
還是那句話,面向?qū)ο蟛皇悄膫€(gè)語(yǔ)言所特有的屬性,而是一種編程的思想,與其說(shuō)js是面向?qū)ο蟮木幊?,不如說(shuō)是面向原型的編程語(yǔ)言。
當(dāng)然關(guān)于面向原型什么,感興趣可以看一下,其實(shí)沒啥用在開發(fā)中!
小生才疏學(xué)淺,有解釋不當(dāng)?shù)牡胤竭€請(qǐng)見諒,也可以私信評(píng)論互相學(xué)習(xí)。