
- Javascript 基礎教程
- Javascript - 首頁
- JavaScript - 路線圖
- JavaScript - 概述
- JavaScript - 特性
- JavaScript - 啟用
- JavaScript - 放置
- JavaScript - 語法
- JavaScript - Hello World
- JavaScript - Console.log()
- JavaScript - 註釋
- JavaScript - 變數
- JavaScript - let 語句
- JavaScript - 常量
- JavaScript - 資料型別
- JavaScript - 型別轉換
- JavaScript - 嚴格模式
- JavaScript - 保留關鍵字
- JavaScript 運算子
- JavaScript - 運算子
- JavaScript - 算術運算子
- JavaScript - 比較運算子
- JavaScript - 邏輯運算子
- JavaScript - 位運算子
- JavaScript - 賦值運算子
- JavaScript - 條件運算子
- JavaScript - typeof 運算子
- JavaScript - 空值合併運算子
- JavaScript - 刪除運算子
- JavaScript - 逗號運算子
- JavaScript - 分組運算子
- JavaScript - Yield 運算子
- JavaScript - 展開運算子
- JavaScript - 冪運算子
- JavaScript - 運算子優先順序
- JavaScript 控制流
- JavaScript - If...Else
- JavaScript - While 迴圈
- JavaScript - For 迴圈
- JavaScript - For...in
- Javascript - For...of
- JavaScript - 迴圈控制
- JavaScript - Break 語句
- JavaScript - Continue 語句
- JavaScript - Switch Case
- JavaScript - 使用者定義迭代器
- JavaScript 函式
- JavaScript - 函式
- JavaScript - 函式表示式
- JavaScript - 函式引數
- JavaScript - 預設引數
- JavaScript - Function() 建構函式
- JavaScript - 函式提升
- JavaScript - 自執行函式
- JavaScript - 箭頭函式
- JavaScript - 函式呼叫
- JavaScript - Function call()
- JavaScript - Function apply()
- JavaScript - Function bind()
- JavaScript - 閉包
- JavaScript - 變數作用域
- JavaScript - 全域性變數
- JavaScript - 智慧函式引數
- JavaScript 物件
- JavaScript - Number
- JavaScript - Boolean
- JavaScript - 字串
- JavaScript - 陣列
- JavaScript - Date
- JavaScript - DataView
- JavaScript - 處理程式
- JavaScript - Math
- JavaScript - RegExp
- JavaScript - Symbol
- JavaScript - 集合
- JavaScript - WeakSet
- JavaScript - Map
- JavaScript - WeakMap
- JavaScript - 可迭代物件
- JavaScript - Reflect
- JavaScript - TypedArray
- JavaScript - 模板字面量
- JavaScript - 標記模板
- 面向物件 JavaScript
- JavaScript - 物件
- JavaScript - 類
- JavaScript - 物件屬性
- JavaScript - 物件方法
- JavaScript - 靜態方法
- JavaScript - 顯示物件
- JavaScript - 物件訪問器
- JavaScript - 物件建構函式
- JavaScript - 原生原型
- JavaScript - ES5 物件方法
- JavaScript - 封裝
- JavaScript - 繼承
- JavaScript - 抽象
- JavaScript - 多型
- JavaScript - 解構賦值
- JavaScript - 物件解構
- JavaScript - 陣列解構
- JavaScript - 巢狀解構
- JavaScript - 可選鏈
- JavaScript - 全域性物件
- JavaScript - Mixins
- JavaScript - 代理
- JavaScript 版本
- JavaScript - 歷史
- JavaScript - 版本
- JavaScript - ES5
- JavaScript - ES6
- ECMAScript 2016
- ECMAScript 2017
- ECMAScript 2018
- ECMAScript 2019
- ECMAScript 2020
- ECMAScript 2021
- ECMAScript 2022
- JavaScript 非同步
- JavaScript - 非同步
- JavaScript - 回撥函式
- JavaScript - Promise
- JavaScript - Async/Await
- JavaScript - 微任務
- JavaScript - Promisification
- JavaScript - Promise 鏈式呼叫
- JavaScript - 定時事件
- JavaScript - setTimeout()
- JavaScript - setInterval()
- JavaScript Cookie
- JavaScript - Cookie
- JavaScript - Cookie 屬性
- JavaScript - 刪除 Cookie
- JavaScript 瀏覽器 BOM
- JavaScript - 瀏覽器物件模型
- JavaScript - Window 物件
- JavaScript - Document 物件
- JavaScript - Screen 物件
- JavaScript - History 物件
- JavaScript - Navigator 物件
- JavaScript - Location 物件
- JavaScript - Console 物件
- JavaScript Web API
- JavaScript - Web API
- JavaScript - History API
- JavaScript - Storage API
- JavaScript - Forms API
- JavaScript - Worker API
- JavaScript - Fetch API
- JavaScript - Geolocation API
- JavaScript 事件
- JavaScript - 事件
- JavaScript - DOM 事件
- JavaScript - addEventListener()
- JavaScript - 滑鼠事件
- JavaScript - 鍵盤事件
- JavaScript - 表單事件
- JavaScript - 視窗/文件事件
- JavaScript - 事件委託
- JavaScript - 事件冒泡
- JavaScript - 事件捕獲
- JavaScript - 自定義事件
- JavaScript 錯誤處理
- JavaScript - 錯誤處理
- JavaScript - try...catch
- JavaScript - 除錯
- JavaScript - 自定義錯誤
- JavaScript - 擴充套件錯誤
- JavaScript 重要關鍵字
- JavaScript - this 關鍵字
- JavaScript - void 關鍵字
- JavaScript - new 關鍵字
- JavaScript - var 關鍵字
- JavaScript HTML DOM
- JavaScript - HTML DOM
- JavaScript - DOM 方法和屬性
- JavaScript - DOM 文件
- JavaScript - DOM 元素
- JavaScript - DOM 屬性 (Attr)
- JavaScript - DOM 表單
- JavaScript - 更改 HTML
- JavaScript - 更改 CSS
- JavaScript - DOM 動畫
- JavaScript - DOM 導航
- JavaScript - DOM 集合
- JavaScript - DOM NodeList
- JavaScript - DOM DOMTokenList
- JavaScript 其他
- JavaScript - Ajax
- JavaScript - 非同步迭代
- JavaScript - Atomics 物件
- JavaScript - Rest 引數
- JavaScript - 頁面重定向
- JavaScript - 對話方塊
- JavaScript - 頁面列印
- JavaScript - 驗證
- JavaScript - 動畫
- JavaScript - 多媒體
- JavaScript - 影像地圖
- JavaScript - 瀏覽器
- JavaScript - JSON
- JavaScript - 多行字串
- JavaScript - 日期格式
- JavaScript - 獲取日期方法
- JavaScript - 設定日期方法
- JavaScript - 模組
- JavaScript - 動態匯入
- JavaScript - BigInt
- JavaScript - Blob
- JavaScript - Unicode
- JavaScript - 淺複製
- JavaScript - 呼叫棧
- JavaScript - 引用型別
- JavaScript - IndexedDB
- JavaScript - Clickjacking 攻擊
- JavaScript - 柯里化
- JavaScript - 圖形
- JavaScript - Canvas
- JavaScript - 防抖
- JavaScript - 效能
- JavaScript - 樣式指南
JavaScript - 抽象
JavaScript 中的抽象
JavaScript 中的抽象可以透過抽象類實現。在面向物件程式設計中,抽象的概念允許您隱藏實現細節,只向用戶公開功能。
例如,您可以透過使用其名稱訪問方法來執行 JavaScript 中的 Math 物件方法,但看不到它是如何實現的。同樣,像 push()、pop() 等陣列方法可以執行,但您不知道它在內部是如何實現的。
因此,抽象透過公開所需的功能並隱藏內部實現細節來使程式碼更簡潔。
如何在 JavaScript 中實現抽象?
在大多數程式語言中,您可以使用抽象類來實現抽象。抽象類只包含方法宣告,而不包含實現。此外,您需要將抽象類中宣告的方法實現到子類中。此外,您不能建立抽象類的例項。
JavaScript 本身不允許像 Java 或 CPP 那樣建立抽象類,但您可以使用物件建構函式來實現相同的功能。
首先,讓我們使用下面的示例建立一個抽象類。
建立抽象類
在下面的示例中,fruit() 函式初始化 name 屬性。當任何人建立 fruit() 的例項時,建構函式屬性的值將變為等於 'fruit'。因此,我們丟擲一個錯誤以防止建立 fruit 的例項。
此外,我們已將 getName() 方法新增到原型中。之後,我們建立 fruit() 建構函式的例項,您可以在輸出中觀察到錯誤。
<html> <body> <div id = "output"> </div> <script> try { // Object constructor function fruit() { this.name = "Fruit"; if (this.constructor === fruit) {// Preventing the instance of the object throw new Error("You can't create the instance of the fruit."); } } // Implementing method in the prototype fruit.prototype.getName = function () { return this.name; } const apple = new fruit(); } catch (error) { document.getElementById("output").innerHTML = error; } </script> </body> </html>
輸出
Error: You can't create the instance of the fruit.
在上面的示例中,您學習瞭如何實現抽象類的功能。
現在,您將學習透過下面的示例擴充套件抽象類和實現抽象類中定義的方法。
擴充套件抽象類
在下面的示例中,fruit() 建構函式與上面的示例類似。我們已實現 Apple() 建構函式,初始化 name 屬性。
之後,我們使用 Object.create() 方法將 fruit() 函式的原型分配給 Apple() 函式。這意味著 Apple() 函式繼承了 fruit() 類的屬性和方法。
之後,我們建立了 Apple() 類的例項並呼叫了 getName() 方法。
<html> <body> <div id = "output">The name of the fruit is: </div> <script> // Abstract class function fruit() { this.name = "Fruit"; if (this.constructor === fruit) { // Preventing the instance of the object throw new Error("You can't create the instance of the fruit."); } } // Implementing method in the prototype fruit.prototype.getName = function () { return this.name; } // Child class function Apple(fruitname) { this.name = fruitname; } // Extending the Apple class with the fruit class Apple.prototype = Object.create(fruit.prototype); const apple = new Apple("Apple"); document.getElementById("output").innerHTML += apple.getName(); </script> </body> </html>
輸出
The name of the fruit is: Apple
原型在上面的程式碼中實現了 getName() 方法。因此,它是隱藏的。
透過這種方式,您可以使用物件建構函式在 JavaScript 中實現抽象。