TypeScript中类的使用详解

Posted 老张在线敲代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TypeScript中类的使用详解相关的知识,希望对你有一定的参考价值。

类的简介:

类中主要包含了俩个部分:属性跟方法

类直接去获取实例上的方法和属性是获取不到的
所以类可以通过在属性或者方法前加static来获取实例中的方法和属性

属性和方法前加readonly表示只读的不可修改的

class Person{
// 定义实例属性
// readonly开头的属性表示只读的属性,不可修改
     name:string = "孙悟空";
    static age:number = 18

    // 定义方法
    static sayHello(){
        console.log("我是sayHello函数")
    }
}
//per是person的实例
// person类无法直接获取到实例中的属性
const per = new Person()
console.log(per);
per.name = "ccc";
console.log(per.name);
console.log(Person.age);

// per.sayHello()
Person.sayHello()

构造函数和this的使用

构造函数constructor,他在对象创建时候被调用


```handlebars
//通过构造函数创建多个不同名字和年龄的狗子
class Dog{
    name:string;
    age:number;
    constructor(name,age){
        // console.log("构造函数执行了");
        // this表示当前的实例,在构造函数中当前对象就是新创建的那个对象
        this.name = name;
        this.age = age
    }
    sayDog(){
        //在方法中可以通过this来表示调用方法的对象
        alert(this.name)
    }
}
const dog = new Dog("小黑",4)
const dog1 = new Dog("小白",2)
const dog2 = new Dog("旺财",21)
const dog3 = new Dog("大黄",12)
console.log(dog);
console.log(dog1);
console.log(dog2);
console.log(dog3);

``

类的继承

Animal类为父类,让cat类跟bird类去继承Animal中的方法和属性,继承之后子类拥有了父类中的方法和属性

子类中可以直接添加父类中没有的方法,如果子类中添加了父类中相同的方法,子类的方法就会覆盖掉父类中的方法,子类中这种覆盖父类方法的方式叫做重写

如果在子类中写了构造函数constructor,我们必须对父类的构造函数使用super(父类中的属性)进行调用,否则就会中断继承

(function(){
    //定义一个Animal类
    class Animal{
        name:string;
        age:number;
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
        sayMiao(){
            console.log("动物在叫唤");
            
        }
    }
    //通过继承我们可以将多个子类中的方法都放入父类中
    //这样我们只需要写一次就可以拥有子类中的全部的方法和属性
    //如果希望在子类中添加一些父类中没有的方法或者属性,直接加就行
    class Cat extends Animal{
        run(){
            console.log("子类中又定义了一个父类中没有的方法")
        }
        sayMiao(){
            console.log(cat.name+":我爱吃小雀儿");
            
        }
    }
    //使bird类继承animal类
    class Bird extends Animal{
        //如果在子类中添加了父类中有的方法,子类的方法就会覆盖掉父类中的方法
         //子类中这种覆盖父类方法的方式叫做重写
        sayMiao(){
            console.log(bird.name+":我爱被咪咪吃");
        }
    }
    const cat = new Cat("咪咪",22);
    console.log(cat);
    cat.sayMiao()
    cat.run()
    const bird = new Bird("小雀儿",22);
    console.log(bird);
    bird.sayMiao()
})()

抽象类

abstract和其他类区别不大只是不能用来创建对象
抽象类就是专门用来继承的类

(function(){
    abstract class Animal{
        name:string;
        constructor(name){
            this.name = name
        }
        sayHello(){
            console.log("我不会叫")
        }
    }
    class Ant extends Animal{
        sayHello(){
            // super是父类的实例
            // super.sayHello()
            // 子类中如果想引用父类的方法时用super
            // 不用super的话子类中重复创建父类的函数就会覆盖掉父类中的函数方法
            console.log("我不会叫+1")
            // 如果在子类中写了构造函数constructor,我们必须对父类的构造函数进行调用,否则就会中断继承
        }
    }
    const ant = new Ant("蚂蚁")
    ant.sayHello()
    console.log(ant)
})()

类中接口的使用

接口就是用来定义一个类的结构,用来定义一个类中应该包含哪些属性和方法,相当于对类的限制

(function(){
    //描述一个对象类型
    type myType = {
        name:string,
        age:number
    }
    //接口完全可以当成类型声明去使用
    interface myJieKou{
        name:string;
        age:number
    }
    //接口i可以重复声明
    interface myJieKou{
        gender:string
    }
   
    //接口可以在定义类的时候去限制类的结构
    //所有的属性在接口中都不能有实际的值
    //接口定义一个对象时不考虑实际值
    //在接口中所有的方法都是抽象方法
    interface myJieKou1{
        name:string,
        sayHello():void
    }
    const obj:myJieKou = {
        name:"zyb",
        age:11,
        gender:"男"
    }

    //定义类时候可以用类实现一个接口,让类满足接口的要求
    //接口就是对类的限制
    class MyJieKou2 implements myJieKou1{
        name: string
        constructor(name){
            this.name = name
        }
        sayHello(): void {
            console.log("大家好")
        }
        
    }
})()

以上是关于TypeScript中类的使用详解的主要内容,如果未能解决你的问题,请参考以下文章

Javascript/Typescript 中类的交叉引用如何工作?

Python中类的特殊方法详解

详解c++中类的六个默认的成员函数

详解c++中类的六个默认的成员函数

详解c++中类的六个默认的成员函数

TypeScript入门学习之路