介紹
物件導向程式設計 (OOP) 是建構結構良好、模組化和可重複使用程式碼的基礎。雖然 JavaScript 最初是過程性的,但 ES6 及更高版本引入了 OOP 語法,使其成為掌握函數式和物件導向範例的理想語言。本文涵蓋了 JavaScript 中的基本 OOP 概念,包括類別、繼承、多態性和抽象,以及 JavaScript 特定的功能,例如原型繼承和物件組合。
JavaScript 中 OOP 的關鍵概念
1.封裝:
封裝允許對物件內的資料和方法進行分組,限制對物件狀態的直接存取。這可以保護資料免受意外修改並允許受控互動。
class Car { constructor(make, model) { this.make = make; this.model = model; this._engineOn = false; } startEngine() { this._engineOn = true; console.log(`${this.make} ${this.model} engine started.`); } stopEngine() { this._engineOn = false; console.log(`${this.make} ${this.model} engine stopped.`); } } const myCar = new Car("Toyota", "Corolla"); myCar.startEngine(); // Output: Toyota Corolla engine started.
2.繼承:
繼承允許基於父類別建立子類,允許程式碼重複使用和定義層次結構。
class Animal { constructor(name) { this.name = name; } speak() { console.log(`${this.name} makes a sound.`); } } class Dog extends Animal { speak() { console.log(`${this.name} barks.`); } } const myDog = new Dog("Max"); myDog.speak(); // Output: Max barks.
3.多態性:
多態性讓不同的類別響應相同的函數或方法呼叫。 JavaScript 透過方法重寫實現多態性。
class Printer { print() { console.log("Printing document..."); } } class PDFPrinter extends Printer { print() { console.log("Printing PDF document..."); } } const printer = new Printer(); const pdfPrinter = new PDFPrinter(); printer.print(); // Printing document... pdfPrinter.print(); // Printing PDF document...
4.摘要:
抽象透過僅暴露必要的部分來簡化複雜的系統。 ES2020引入了帶有#的私有字段,允許封裝在類別中。
class Account { #balance; constructor(initialBalance) { this.#balance = initialBalance; } deposit(amount) { this.#balance += amount; } getBalance() { return this.#balance; } } const myAccount = new Account(1000); myAccount.deposit(500); console.log(myAccount.getBalance()); // Output: 1500
JavaScript 中基於原型的繼承
JavaScript 是基於原型的,這意味著物件可以直接從其他物件而不是類別繼承。這是透過原型實現的,原型是其他物件繼承方法和屬性的物件。
function Vehicle(type) { this.type = type; } Vehicle.prototype.start = function() { console.log(`${this.type} is starting.`); }; const car = new Vehicle("Car"); car.start(); // Car is starting.
組合優於繼承
組合是繼承的替代方案,您無需在層次結構中建立類,而是建立包含較小的可重複使用物件的物件來實現所需的功能。
const canFly = { fly() { console.log("Flying!"); } }; const canSwim = { swim() { console.log("Swimming!"); } }; function Fish(name) { this.name = name; } Object.assign(Fish.prototype, canSwim); const fish = new Fish("Nemo"); fish.swim(); // Swimming!
JavaScript 中的高階 OOP 模式
1。工廠模式:
工廠模式是一種設計模式,您可以在不指定確切類別的情況下建立物件。它對於封裝物件的建立邏輯很有用。
function createUser(name, role) { return { name, role, describe() { console.log(`${this.name} is a ${this.role}`); } }; } const admin = createUser("Alice", "Administrator"); admin.describe(); // Alice is an Administrator
2。單例模式:
Singleton 是一種設計模式,其中一個類別只有一個實例。它對於創建全域可存取的物件(例如配置或應用程式狀態)非常有用。
const Singleton = (function () { let instance; function createInstance() { return new Object("I am the instance"); } return { getInstance: function () { if (!instance) { instance = createInstance(); } return instance; } }; })(); const instance1 = Singleton.getInstance(); const instance2 = Singleton.getInstance(); console.log(instance1 === instance2); // true
3。觀察者模式:
觀察者模式定義了一種依賴關係,其中一個物件(主題)的變更會導致其他物件(觀察者)的通知。
class Car { constructor(make, model) { this.make = make; this.model = model; this._engineOn = false; } startEngine() { this._engineOn = true; console.log(`${this.make} ${this.model} engine started.`); } stopEngine() { this._engineOn = false; console.log(`${this.make} ${this.model} engine stopped.`); } } const myCar = new Car("Toyota", "Corolla"); myCar.startEngine(); // Output: Toyota Corolla engine started.
挑戰和最佳實踐
1。避免繼承過度使用: 傾向於組合以獲得更好的靈活性和重複使用性。
2.盡量減少副作用: 保持資料封裝以防止意外變更。
3.使用 Object.freeze: 這可以防止不可變物件的意外修改。
在最後
JavaScript 的 OOP 方法提供了一個靈活的混合模型,結合了基於原型的繼承和經典的 OOP。借助 ES6 的進步(例如類別和私人字段),JavaScript 允許開發人員建立複雜的應用程序,同時保持乾淨的程式碼結構。透過掌握 JavaScript 中的 OOP,您可以為實際應用程式建立可擴充、可維護且高效能的程式碼。
我的個人網站:https://shafayet.zya.me
給你的表情包? ? ?
以上是主導 JavaScript 中的物件導向程式設計 (OOP)。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

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

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

記事本++7.3.1
好用且免費的程式碼編輯器

WebStorm Mac版
好用的JavaScript開發工具