目錄
什麼是OOP?
JavaScript和OOP
沒有類別的OOP
首頁 web前端 js教程 JavaScript是OOP語言嗎?

JavaScript是OOP語言嗎?

Oct 21, 2017 am 10:06 AM
javascript js 語言

我知道,這個話題已經被討論過太多次了。但是,它總是被不斷地提及。每當Java或C#或任何其他OOP語言的開發人員與JavaScript接觸時,這些開發人員都會抱怨連連。他們說,用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語言嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
在 iPhone 上更改語言的 3 種方法 在 iPhone 上更改語言的 3 種方法 Feb 02, 2024 pm 04:12 PM

眾所周知,iPhone是最人性化的電子產品之一,其中一個原因是它可以輕鬆地根據您的喜好進行個性化設定。在個人化設定中,您可以變更語言,這與您在設定iPhone時選擇的語言不同。如果您對多種語言熟悉,或者您的iPhone語言設定錯誤,您可以按照我們下面解釋的方法進行更改。如何更改iPhone的語言[3種方法]iOS允許使用者在iPhone上自由切換首選語言,以適應不同的需求。您可以更改與Siri的互動語言,方便與語音助理溝通。同時,在使用本機鍵盤時,您可以輕鬆地在多種語言之間切換,提高輸入效率。

建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

如何將Win10電腦的語言設定為漢語? 如何將Win10電腦的語言設定為漢語? Jan 05, 2024 pm 06:51 PM

有時候我們再剛入手安裝好電腦系統之後發現系統時英文的,遇到這種情況我們就需要把電腦的語言改成中文,那麼win10系統裡面該怎麼把電腦的語言改成中文呢,現在就給大家帶來具體的操作方法。 win10電腦語言怎麼改成中文1、開啟電腦點選左下角的開始按鍵。 2、點選左側的設定選項。 3.開啟的頁面選擇「時間和語言」4、開啟後,再點選左側的「語言」5、在這裡就可以設定你要的電腦語言。

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 Dec 18, 2023 pm 03:39 PM

隨著網路金融的快速發展,股票投資已經成為了越來越多人的選擇。而在股票交易中,蠟燭圖是常用的技術分析方法,它能夠顯示股票價格的變動趨勢,幫助投資人做出更精準的決策。本文將透過介紹PHP和JS的開發技巧,帶領讀者了解如何繪製股票蠟燭圖,並提供具體的程式碼範例。一、了解股票蠟燭圖在介紹如何繪製股票蠟燭圖之前,我們首先需要先了解什麼是蠟燭圖。蠟燭圖是由日本人

探索智能體的邊界:AgentQuest,一個全面衡量和提升大型語言模型智能體性能的模組化基準框架 探索智能體的邊界:AgentQuest,一個全面衡量和提升大型語言模型智能體性能的模組化基準框架 Apr 11, 2024 pm 08:52 PM

基於大模型的持續最佳化,LLM智能體-這些強大的演算法實體已經展現出解決複雜多步驟推理任務的潛力。從自然語言處理到深度學習,LLM智能體正逐漸成為研究和工業界的焦點,它們不僅能理解和生成人類語言,還能在多樣的環境中製定策略、執行任務,甚至使用API​​調用和編碼來建置解決方案。在這種背景下,AgentQuest框架的提出具有里程碑意義,它不僅僅是一個LLM智能體的評估和進步提供了一個模組化的基準測試平台,而且透過其易於擴展的API,為研究人員提供了一個強大的工具,以更細緻地追蹤和改進這些智能體的性能

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

js和vue的關係 js和vue的關係 Mar 11, 2024 pm 05:21 PM

js和vue的關係:1、JS作為Web開發基石;2、Vue.js作為前端框架的崛起;3、JS與Vue的互補關係;4、JS與Vue的實踐應用。

大模型下B端前端程式碼輔助生成的思考與實踐 大模型下B端前端程式碼輔助生成的思考與實踐 Apr 18, 2024 am 09:30 AM

一、背景重構工作中,程式碼規格:B端前端開發過程中開發者總會面臨重複開發的痛點,許多CRUD頁面的元素模組基本上相似,但仍需手動開發,將時間花在簡單的元素搭建上,降低了業務需求的開發效率,同時因為不同開發者的程式碼風格不一致,使得迭代時其他人上手成本較高。 AI取代簡單腦力:AI大模型的不斷發展,已經具備簡單的理解能力,並且可以進行語言到指令的轉換。對於基礎頁面建構這樣的通用指令可滿足日常基礎頁面搭建的需求,提升通用場景業務開發效率。二、生成連結一覽B端頁面清單、表單、詳情都支援生成,連結大概可分為以下幾

See all articles