date
Jan 31, 2024 08:42 AM
type
status
slug
summary
tags
category
updated
Oct 24, 2024 12:52 PM
icon
password
类理论
类是对现实世界实体的抽象,通过封装数据和相关的操作方法。继承允许创建基于通用类的专门化子类。这样的结构促进了代码重用和组织。在类层次结构中,子类可以重写父类方法以展现特定行为,这种机制称为多态。面向对象编程将数据结构视为具有相关操作的实体,以整洁的方式模拟现实世界的复杂性。
类是一种设计模式。许多语言提供了对于面向类软件设计的原生语法。JavaScript 也有类
似的语法,但是和其他语言中的类完全不同。
类的机制
类的机制提供了一个框架,允许我们创建数据和方法的蓝图。这个蓝图(类)可以用来实例化对象,这些对象具备了类定义的属性和行为。通过继承,一个类可以基于另一个类来创建,继承其属性和方法,同时还可以添加或改写特定的功能。多态性允许方法在不同的上下文中呈现不同的行为,而共享的方法名增强了代码的表现力和灵活性。简而言之,类使得代码更加模块化,易于管理和扩展。
类的继承
类的继承是一种机制。它可以让子类继承父类的方法和属性。这样,子类可以重用父类的代码,减少了重复,并且可以通过添加新方法或重写现有方法来扩展或定制其行为。在继承链中,多态允许我们编写可适用于父类及其任何子类的代码,并且在运行时能够根据对象的实际类型来确定调用哪个方法。例如下面的代码:
多重继承就是一个子类继承了多个父类,但是这样会导致一些问题。例如继承的2个父类中有同样的方法或者属性,那么该使用谁呢。基于种种问题,多重继承并不被推荐使用。
混入
在继承或者实例化时,JavaScript的对象机制并不会自动执行复制行为。简单来说,JavaScript 中只有对象,并不存在可以被实例化的“类”。一个对象并不会被复制到其他对象,它们会被关联起来。
由于在其他语言中类表现出来的都是复制行为,因此 JavaScript 开发者也想出了一个方法来模拟类的复制行为,这个方法就是混入。接下来我们会看到两种类型的混入:显式和隐式。
- 显式混入:像
Object.assign()
这样的工具可以将一个对象的属性复制到另一个对象上,这是一种显式的方式。
- 隐式混入:通过使用
.call()
或.apply()
方法将一个对象的上下文(this
)更改为另一个对象,然后执行函数。
混入可以提供一个轻量级,更易于理解和维护的方式来共享功能。但是,它们也有潜在的缺点,比如可能导致属性名冲突,或者在混入的属性和方法之间产生隐秘的依赖关系。此外,因为混入通常涉及复制属性,所以它们并不适合复制复杂的、引用其他对象的属性。而且会产生代码语法和维护的问题。