本篇內(nèi)容主要講解“JavaScript是OOP語言嗎”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“JavaScript是OOP語言嗎”吧!
創(chuàng)新互聯(lián)專注于河口網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供河口營銷型網(wǎng)站建設(shè),河口網(wǎng)站制作、河口網(wǎng)頁設(shè)計(jì)、河口網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造河口網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供河口網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
什么是OOP?
OOP模式?jīng)]有正式的標(biāo)準(zhǔn)規(guī)范。沒有一個(gè)技術(shù)文檔定義了什么是OOP,什么不是OOP。OOP定義主要基于早期研究人員,如Kristen Nygaard, Alan Kays, William Cook等人發(fā)表的論文中的常識(shí)。已經(jīng)有很多人嘗試定義OOP以及一個(gè)可廣泛接受的定義來對編程語言進(jìn)行分類,因?yàn)槊嫦驅(qū)ο蠡趦蓚€(gè)要求:
通過對象建模問題的能力。
支持一些準(zhǔn)許模塊化和代碼重用的原則。
為了滿足***個(gè)要求,這種語言必須使開發(fā)人員能夠使用對象來描述現(xiàn)實(shí)并定義對象之間的關(guān)系,如下所示:
關(guān)聯(lián):對象引用另一個(gè)獨(dú)立對象的能力。
聚合:對象嵌入一個(gè)或多個(gè)獨(dú)立對象的能力。
組合:對象嵌入一個(gè)或多個(gè)依賴對象的能力。
通常,如果語言支持以下原則,則能滿足第二個(gè)要求:
封裝:專注于數(shù)據(jù)和操縱代碼的單一實(shí)體,并隱藏其內(nèi)部細(xì)節(jié)的能力。
繼承:一個(gè)對象從一個(gè)或多個(gè)其他對象獲取某些或所有要素的機(jī)制。
多態(tài):根據(jù)數(shù)據(jù)類型或結(jié)構(gòu)不同地處理對象的能力。
滿足這些要求的語言我們通常將其歸類為為面向?qū)ο蟮摹?/p>
JavaScript和OOP
所以現(xiàn)在我們知道OOP語言應(yīng)該是什么樣子的了。那么,我們可以證明JavaScript是一種OOP語言嗎?咱們試試吧。
我們知道,JavaScript對象支持關(guān)聯(lián),聚合和組合的能力并不強(qiáng)勁。請看以下代碼:
var johnSmith = { firstName: "John", lastName: "Smith", address: { //Composition street: "123 Duncannon Street", city: "London", country: "United Kingdom" } }; var nickSmith = { firstName: "Nick", lastName: "Smith", address: { //Composition street: "321 Oxford Street", city: "London", country: "United Kingdom" } }; johnSmith.parent = nickSmith; //Association var company = { name: "ACME Inc.", employees: [] }; //Aggregation company.employees.push(johnSmith); company.employees.push(nickSmith);
在上面的代碼中,你可以找到一個(gè)組合(address屬性)的示例,一個(gè)關(guān)聯(lián)(parent屬性)的示例和一個(gè)聚合(employees屬性)的示例。
至于封裝,JavaScript對象是支持?jǐn)?shù)據(jù)和函數(shù)的實(shí)體,但它們沒有高級的本地支持來隱藏內(nèi)部細(xì)節(jié)。JavaScript對象不關(guān)心隱私。如果不謹(jǐn)慎的話,所有的屬性和方法都可以公開訪問。但是,我們可以應(yīng)用若干技術(shù)來定義對象的內(nèi)部狀態(tài),并保護(hù)對象以防外部訪問:使用getter和setter來利用閉包。
通過所謂的原型繼承,JavaScript在基本層中支持繼承。即使有些開發(fā)人員認(rèn)為它有點(diǎn)簡單,但JavaScript的繼承機(jī)制是完全有效的,并允許你得到與大多數(shù)公認(rèn)的OOP語言相同的結(jié)果。任憑你怎么想,JavaScript有一個(gè)機(jī)制,通過這個(gè)機(jī)制“一個(gè)對象從一個(gè)或多個(gè)其他對象獲取一些或所有的功能”,這就是繼承。
有多態(tài)性的挑戰(zhàn)似乎更加困難,因?yàn)樵S多人把這個(gè)概念與數(shù)據(jù)類型聯(lián)系起來。實(shí)際上,多態(tài)性涉及編程語言的許多方面,并且不僅僅是與OOP語言有關(guān)。通常它涉及諸如泛型、重載和結(jié)構(gòu)子類型等條目。所有這些對于一種“簡單”和弱類型的語言——JavaScript——來說似乎不堪重負(fù)。然而事實(shí)并非如此:在JavaScript中,我們可以通過若干方式實(shí)現(xiàn)不同類型的多態(tài),也許我們在不知不覺中已經(jīng)做過很多次了。
沒有類的OOP
“好吧,但話說回來,JavaScript沒有類?!?/p>
許多開發(fā)人員認(rèn)為JavaScript缺乏類的概念,而沒有將JavaScript視為一種真正的面向?qū)ο蟮恼Z言,因?yàn)樗粡?qiáng)制符合OOP原則。
但是,我們可以看到,在非正式的定義中,并沒有明確提及類。誠然,對象需要特性和原理。但類并非真正的要求,只是有時(shí),類是一種抽象具有公共屬性的對象集的簡便方法而已。因此,即使一種語言的支持對象沒有類,它也可以是面向?qū)ο蟮恼Z言,例如JavaScript。
此外,OOP原則的目的旨在得到支持。為了在語言中進(jìn)行編程,OOP原則不應(yīng)該是強(qiáng)制規(guī)定的。開發(fā)人員可以選擇使用允許他創(chuàng)建面向?qū)ο蟠a的構(gòu)造,也可以選擇不使用。許多人批評JavaScript是因?yàn)殚_發(fā)人員可以編寫違反OOP原則的代碼。但這只是程序員的選擇,而不是語言的限制。其他的編程語言也會(huì)發(fā)生這樣的事情,如C ++。
所以,我們可以得出這樣一個(gè)結(jié)論,缺乏抽象類并允許開發(fā)人員自由使用或不使用支持OOP原理的功能,并非認(rèn)定JavaScript是OOP語言的真正障礙。
到此,相信大家對“JavaScript是OOP語言嗎”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
新聞名稱:JavaScript是OOP語言嗎
當(dāng)前路徑:http://www.rwnh.cn/article16/igpddg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、外貿(mào)建站、動(dòng)態(tài)網(wǎng)站、網(wǎng)站內(nèi)鏈、靜態(tài)網(wǎng)站、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)