返回

JavaScript中的TypeScript中的类

前端

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类继承的类来实现。