您好,登錄后才能下訂單哦!
本篇內容主要講解“JavaScript是OOP語言嗎”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JavaScript是OOP語言嗎”吧!
什么是OOP?
OOP模式沒有正式的標準規范。沒有一個技術文檔定義了什么是OOP,什么不是OOP。OOP定義主要基于早期研究人員,如Kristen Nygaard, Alan Kays, William Cook等人發表的論文中的常識。已經有很多人嘗試定義OOP以及一個可廣泛接受的定義來對編程語言進行分類,因為面向對象基于兩個要求:
通過對象建模問題的能力。
支持一些準許模塊化和代碼重用的原則。
為了滿足***個要求,這種語言必須使開發人員能夠使用對象來描述現實并定義對象之間的關系,如下所示:
關聯:對象引用另一個獨立對象的能力。
聚合:對象嵌入一個或多個獨立對象的能力。
組合:對象嵌入一個或多個依賴對象的能力。
通常,如果語言支持以下原則,則能滿足第二個要求:
封裝:專注于數據和操縱代碼的單一實體,并隱藏其內部細節的能力。
繼承:一個對象從一個或多個其他對象獲取某些或所有要素的機制。
多態:根據數據類型或結構不同地處理對象的能力。
滿足這些要求的語言我們通常將其歸類為為面向對象的。
JavaScript和OOP
所以現在我們知道OOP語言應該是什么樣子的了。那么,我們可以證明JavaScript是一種OOP語言嗎?咱們試試吧。
我們知道,JavaScript對象支持關聯,聚合和組合的能力并不強勁。請看以下代碼:
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);
在上面的代碼中,你可以找到一個組合(address屬性)的示例,一個關聯(parent屬性)的示例和一個聚合(employees屬性)的示例。
至于封裝,JavaScript對象是支持數據和函數的實體,但它們沒有高級的本地支持來隱藏內部細節。JavaScript對象不關心隱私。如果不謹慎的話,所有的屬性和方法都可以公開訪問。但是,我們可以應用若干技術來定義對象的內部狀態,并保護對象以防外部訪問:使用getter和setter來利用閉包。
通過所謂的原型繼承,JavaScript在基本層中支持繼承。即使有些開發人員認為它有點簡單,但JavaScript的繼承機制是完全有效的,并允許你得到與大多數公認的OOP語言相同的結果。任憑你怎么想,JavaScript有一個機制,通過這個機制“一個對象從一個或多個其他對象獲取一些或所有的功能”,這就是繼承。
有多態性的挑戰似乎更加困難,因為許多人把這個概念與數據類型聯系起來。實際上,多態性涉及編程語言的許多方面,并且不僅僅是與OOP語言有關。通常它涉及諸如泛型、重載和結構子類型等條目。所有這些對于一種“簡單”和弱類型的語言——JavaScript——來說似乎不堪重負。然而事實并非如此:在JavaScript中,我們可以通過若干方式實現不同類型的多態,也許我們在不知不覺中已經做過很多次了。
沒有類的OOP
“好吧,但話說回來,JavaScript沒有類。”
許多開發人員認為JavaScript缺乏類的概念,而沒有將JavaScript視為一種真正的面向對象的語言,因為它不強制符合OOP原則。
但是,我們可以看到,在非正式的定義中,并沒有明確提及類。誠然,對象需要特性和原理。但類并非真正的要求,只是有時,類是一種抽象具有公共屬性的對象集的簡便方法而已。因此,即使一種語言的支持對象沒有類,它也可以是面向對象的語言,例如JavaScript。
此外,OOP原則的目的旨在得到支持。為了在語言中進行編程,OOP原則不應該是強制規定的。開發人員可以選擇使用允許他創建面向對象代碼的構造,也可以選擇不使用。許多人批評JavaScript是因為開發人員可以編寫違反OOP原則的代碼。但這只是程序員的選擇,而不是語言的限制。其他的編程語言也會發生這樣的事情,如C ++。
所以,我們可以得出這樣一個結論,缺乏抽象類并允許開發人員自由使用或不使用支持OOP原理的功能,并非認定JavaScript是OOP語言的真正障礙。
到此,相信大家對“JavaScript是OOP語言嗎”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。