- 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 中实现抽象。