首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 1 章 准备知识
1.1 前端技术简介
1.2 HTML入门
1.2.1 准备开发工具
1.2.2 HTML中的基础标签
1.3 CSS入门
1.3.1 CSS选择器入门
1.3.2 CSS样式入门
1.4 JavaScript入门
1.4.1 我们为什么需要JavaScript
1.4.2 JavaScript语法简介
1.4.3 从JavaScript到TypeScript
1.5 渐进式开发框架Vue
1.5.1 第一个Vue应用
1.5.2 范例:一个简单的用户登录页面
1.5.3 Vue 3的新特性
1.5.4 我们为什么要使用Vue框架
第 2 章 TypeScript基础
2.1 重新认识TypeScript
2.1.1 安装TypeScript
2.1.2 TypeScript语言版本的HelloWorld程序
2.1.3 使用高级IDE工具
2.2 TypeScript中的基本类型
2.2.1 布尔、数值与字符串
2.2.2 特殊的空值类型
2.2.3 数组与元组
2.3 TypeScript中有关类型的高级内容
2.3.1 枚举类型
2.3.2 枚举的编译原理
2.3.3 any、never与object类型
2.3.4 关于类型断言
2.4 函数的声明和定义
2.4.1 函数的类型
2.4.2 可选参数、默认参数和不定个数参数
2.4.3 函数的重载
第 3 章 TypeScript中的面向对象编程
3.1 理解与应用“类”
3.1.1 类的定义与继承
3.1.2 类的访问权限控制
3.1.3 只读属性与存取器
3.1.4 关于静态属性与抽象类
3.1.5 类的实现原理
3.2 接口的应用
3.2.1 接口的定义
3.2.2 使用接口约定函数和可索引类型
3.2.3 使用接口来约束类
3.2.4 接口的继承
3.3 TypeScript中的类型推断与高级类型
3.3.1 关于类型推断
3.3.2 联合类型与交叉类型
3.3.3 TypeScript的类型区分能力
3.3.4 字面量类型与类型别名
当前位置:
首页>>
技术小册>>
TypeScript和Vue从入门到精通(一)
小册名称:TypeScript和Vue从入门到精通(一)
### 第3章 TypeScript中的面向对象编程 在软件开发的世界里,面向对象编程(Object-Oriented Programming, OOP)是一种广泛使用的编程范式,它通过将数据(属性)和操作这些数据的方法(函数)封装在对象中来组织代码。TypeScript,作为JavaScript的一个超集,不仅继承了JavaScript的动态类型和灵活性,还通过引入静态类型系统和类、接口等概念,极大地增强了面向对象编程的能力。本章将深入探讨TypeScript中面向对象编程的核心概念,包括类、继承、封装、多态以及接口等。 #### 3.1 类的基本概念 在TypeScript中,类(Class)是面向对象编程的基础。类是一种蓝图,用于创建具有相同属性和方法的对象。通过类,我们可以定义对象的结构,包括其属性和方法。 ```typescript class Person { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } greet(): void { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } } const person1 = new Person('Alice', 30); person1.greet(); // 输出: Hello, my name is Alice and I am 30 years old. ``` 在上面的例子中,`Person`类有两个属性:`name`和`age`,以及一个构造函数`constructor`用于初始化这些属性。此外,还定义了一个方法`greet`用于输出问候语。通过`new`关键字,我们可以创建`Person`类的实例`person1`,并调用其方法。 #### 3.2 访问修饰符 TypeScript支持三种访问修饰符:`public`(默认,公开的)、`protected`(受保护的)和`private`(私有的),用于控制类成员的访问级别。 - **Public**:成员可以在任何地方被访问。 - **Protected**:成员只能在类内部及其子类中被访问。 - **Private**:成员只能在类内部被访问。 ```typescript class Animal { private name: string; constructor(name: string) { this.name = name; } protected speak(): void { console.log(`${this.name} makes a sound.`); } public getName(): string { return this.name; } } class Dog extends Animal { bark(): void { this.speak(); // 可以访问受保护的成员 console.log('Woof!'); } } const dog = new Dog('Buddy'); dog.bark(); // 输出: Buddy makes a sound. Woof! // dog.name; // 错误:'name' 是私有的,不能在类外部访问 ``` #### 3.3 继承 继承是面向对象编程中的一个核心概念,它允许我们基于一个类(父类)来创建另一个类(子类),子类会继承父类的属性和方法,并可以添加新的属性或重写父类的方法。 ```typescript class Vehicle { move(): void { console.log('The vehicle is moving.'); } } class Car extends Vehicle { constructor(public brand: string) { super(); // 调用父类的构造函数 } move(): void { console.log(`${this.brand} is moving.`); } } const myCar = new Car('Toyota'); myCar.move(); // 输出: Toyota is moving. ``` 在上面的例子中,`Car`类继承自`Vehicle`类,并重写了`move`方法以包含品牌信息。注意,在子类的构造函数中,我们需要通过`super()`调用父类的构造函数(如果父类有构造函数的话)。 #### 3.4 封装 封装是面向对象编程的三大特性之一(封装、继承、多态),它指的是将数据(属性)和操作这些数据的方法(函数)组合在一起,形成一个独立的单元(即对象)。通过封装,我们可以隐藏对象的内部实现细节,只对外暴露有限的接口供外部使用。 在TypeScript中,通过访问修饰符(如`private`和`protected`)可以很容易地实现封装。 #### 3.5 多态 多态(Polymorphism)是面向对象编程的又一重要特性,它允许我们以统一的接口处理不同类型的对象。在TypeScript中,多态通常通过继承和方法重写来实现。 ```typescript class Shape { draw(): void { console.log('Drawing a shape.'); } } class Circle extends Shape { draw(): void { console.log('Drawing a circle.'); } } class Rectangle extends Shape { draw(): void { console.log('Drawing a rectangle.'); } } function drawShape(shape: Shape): void { shape.draw(); } const circle = new Circle(); const rectangle = new Rectangle(); drawShape(circle); // 输出: Drawing a circle. drawShape(rectangle); // 输出: Drawing a rectangle. ``` 在这个例子中,`drawShape`函数接受一个`Shape`类型的参数,并调用其`draw`方法。由于`Circle`和`Rectangle`都继承自`Shape`并重写了`draw`方法,因此它们都可以作为`drawShape`的参数,这体现了多态性。 #### 3.6 接口 接口(Interface)在TypeScript中扮演着非常重要的角色,它是对对象形状的描述。接口可以定义对象的结构,包括对象应该包含哪些属性以及这些属性的类型。接口还可以定义对象可以执行的方法及其参数和返回值的类型。 ```typescript interface IPerson { name: string; age: number; greet(message?: string): void; } class Employee implements IPerson { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } greet(message: string = 'Hello'): void { console.log(`${message}, my name is ${this.name} and I am an employee.`); } } const employee: IPerson = new Employee('Bob', 25); employee.greet('Good morning'); // 输出: Good morning, my name is Bob and I am an employee. ``` 在上面的例子中,`IPerson`接口定义了`name`、`age`属性和`greet`方法。`Employee`类实现了`IPerson`接口,这意味着它必须包含接口中定义的所有属性和方法。此外,我们还展示了如何使用接口作为类型注解来创建变量。 #### 3.7 抽象类 抽象类(Abstract Class)是一种特殊的类,它不能被实例化,只能被其他类继承。抽象类通常用于定义一组接口,这些接口由子类实现。在TypeScript中,使用`abstract`关键字来定义抽象类和抽象方法。 ```typescript abstract class Animal { abstract makeSound(): void; move(): void { console.log('The animal is moving.'); } } class Dog extends Animal { makeSound(): void { console.log('Woof!'); } } // const myAnimal = new Animal(); // 错误:不能实例化抽象类 const myDog = new Dog(); myDog.makeSound(); // 输出: Woof! myDog.move(); // 输出: The animal is moving. ``` 在上面的例子中,`Animal`是一个抽象类,它定义了一个抽象方法`makeSound`和一个普通方法`move`。`Dog`类继承自`Animal`并实现了`makeSound`方法。注意,我们不能直接实例化抽象类`Animal`。 #### 结语 通过本章的学习,我们深入了解了TypeScript中面向对象编程的核心概念,包括类、继承、封装、多态、接口以及抽象类等。这些概念是构建复杂、可维护软件系统的基石。掌握它们将使你能够更有效地利用TypeScript的强大功能来开发高质量的Web应用程序。
上一篇:
2.4.3 函数的重载
下一篇:
3.1 理解与应用“类”
该分类下的相关小册推荐:
Vue.js从入门到精通(三)
TypeScript和Vue从入门到精通(三)
Vue面试指南
TypeScript和Vue从入门到精通(二)
vuejs组件实例与底层原理精讲
TypeScript和Vue从入门到精通(四)
Vue.js从入门到精通(二)
TypeScript和Vue从入门到精通(五)
移动端开发指南
Vue原理与源码解析
VUE组件基础与实战
Vue.js从入门到精通(一)