JavaScript中的TypeScript中的类
2023-10-26 09:10:48
TypeScript中的类
类包含了一类事物的抽象特点,包含这类事物的属性和方法。传统方法中我们通过构造函数实现类的概念,在ES6中我们终于迎来了class,而TypeScript除了实现ES6中的类的功能外,还添加了一些新的用法。通过new生成实例的时候,会自动调用constructor方法。
类和对象的定义
class Person {
private name: string;
private age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public getName(): string {
return this.name;
}
public getAge(): number {
return this.age;
}
}
const person = new Person('John', 25);
在上面的例子中,我们定义了一个名为Person的类。Person类有两个私有属性:name和age。Person类还有一个构造函数,它在创建一个新实例时被调用。构造函数接收两个参数:name和age,并将它们分配给类的私有属性。Person类还定义了两个公共方法:getName()和getAge()。getName()方法返回类的name属性,getAge()方法返回类的age属性。
构造函数
构造函数是类的一个特殊方法,它在创建一个新实例时被调用。构造函数的名称必须与类的名称相同,并且不能返回任何值。构造函数可以接收参数,这些参数将被分配给类的属性。
属性和方法
类可以定义属性和方法。属性是类的状态,而方法是类的行为。属性和方法可以是公共的、私有的或受保护的。
- 公共属性和方法可以在类的外部访问。
- 私有属性和方法只能在类的内部访问。
- 受保护的属性和方法可以在类的内部以及从类派生的类中访问。
继承
继承允许一个类从另一个类继承属性和方法。继承的语法如下:
class ChildClass extends ParentClass {
// ...
}
在上面的例子中,ChildClass继承了ParentClass的属性和方法。ChildClass还可以定义自己的属性和方法。
多态性
多态性允许一个类以不同的方式响应相同的方法调用。多态性的语法如下:
class Animal {
public makeSound(): void {
console.log('...');
}
}
class Dog extends Animal {
public makeSound(): void {
console.log('Woof!');
}
}
class Cat extends Animal {
public makeSound(): void {
console.log('Meow!');
}
}
const animal = new Animal();
animal.makeSound(); // ...
const dog = new Dog();
dog.makeSound(); // Woof!
const cat = new Cat();
cat.makeSound(); // Meow!
在上面的例子中,Animal类定义了一个makeSound()方法。Dog类和Cat类从Animal类继承了makeSound()方法。Dog类和Cat类重写了makeSound()方法,使它们以不同的方式响应makeSound()方法调用。
封装
封装允许将类的属性和方法隐藏起来,只允许通过类的公共方法访问它们。封装的语法如下:
class Person {
private name: string;
private age: number;
public getName(): string {
return this.name;
}
public getAge(): number {
return this.age;
}
}
在上面的例子中,name和age属性是私有的,只能通过getName()和getAge()方法访问它们。
抽象
抽象允许定义一个类或方法,而不提供它们的实现。抽象的语法如下:
abstract class Animal {
public abstract makeSound(): void;
}
在上面的例子中,Animal类是一个抽象类,它定义了一个抽象方法makeSound()。抽象方法没有实现,必须由从Animal类继承的类来实现。