js算不算面向對象的語言?
謝邀,js肯定算面向對象語言。有句話說得好,「JavaScript里一切皆對象」。如果不確定,那我們首先明確下什麼是面向對象,有三個核心概念。
一是一切事物皆為對象;
二是對象具有封裝和繼承特性;
三是對象之間使用消息通信,各自存在信息隱藏。
我嘗試通過以下幾個例子來看Js是否都滿足三個特性。
封裝在一些靜態類型的語言如java中,本身語法就提供了這些功能。js當中只能依靠變數的作用域來實現封裝的特性,並且只能模擬出public和private兩種特性。
雖然在es6中也有extend以及class,但其本質仍實現仍是基於原型機制。雖然原型繼承方式寫法很多,但是理解原型鏈機制比較重要,關鍵其實就是理解prototype和__prototype__。
多態多態其實就是把做的內容和誰去做分開。因為js是動態語言,多態性本身就有。下面這個例子就說明了,一個動物能否實現叫聲,只取決於makeSound,而不針對某種類型的對象。
如果你對學習人工智慧和科技新聞感興趣,可以訂閱我的頭條號,我會在這裡發布所有與演算法、機器學習以及深度學習有關的有趣文章。偶爾也回答有趣的問題,有問題可隨時在評論區回復和討論,看到即回。
(碼字不易,若文章對你幫助請點贊支持~)
我學js時間不長不短,還算湊合吧。剛開始聽到的是js是弱類型語言,不能面向對象編程。
到後來接觸其他的編程語言之後有些明白了,面向對象不是哪個語言所特有的屬性,而是一種思想,通俗些說就是把一個項目進行模塊兒化。面向對象的三個特性,封裝,繼承,多態,從這三個方面來看,js是屬於面向對象的編程語言範疇的。
但在js中的繼承並沒有其他語言中的那麼繁瑣,諸如c++中的公有,私有,保護什麼的,所以說js是嚴謹的面向對象的編程語言又感覺不太合適,但在項目開發中是可以採用面向對象的思想來進行對js編程的。
還是那句話,面向對象不是哪個語言所特有的屬性,而是一種編程的思想,與其說js是面向對象的編程,不如說是面向原型的編程語言。
當然關於面向原型什麼,感興趣可以看一下,其實沒啥用在開發中!
小生才疏學淺,有解釋不當的地方還請見諒,也可以私信評論互相學習。
在es6出現之前,js是沒有面向對象概念的,但是卻可以用原型鏈(關鍵字:prototype)實現面向對象,在es6中已經引入了面向對象的概念,所有如今的js也算得上是面向對象的語言了。
推薦閱讀:
※紅米5值不值得買?
※如何看待共享經濟未來的發展?
※如何看待兩員工工作看大量不良內容有後遺症起訴微軟這一事件?
※MongoDB入門教程之二 用nodejs訪問MongoDB
※中美科技戰繼續:華為事件後盤點已站隊的美國盟友