Typescript类-简化基础

40 阅读2分钟

先说说类(class)的理解,其实是为了便于面向对象的写法,通过原型链用来继承共同的组件以及方法,都是通过构造函数来生产类(class)

1.类的基础

类的模块主要是有三种分别是:字段(声明变量)、构造函数(当实例化就调用)、方法(为对象的执行方法)。代码如下:

class Info{
    // 字段
    name:string, 
    // 构造函数
    constructor(name:string){
        this.name = name
    }
    // 方法
    code():void{
        console.log(`我的姓名是:${this.name}`)   
    }
}
// 创建一个对象
const unf = new Info('james')
unf.code() // 我的姓名是james

构造函数的参数名称和字段可以写不同的名称,this.name就是类的字段,this是指向当前的对象。

2.继承

在我们的类中使用继承相当于重要的,因为它们可以扩大各种的类以及方法。代码如下:

class Back{
    num(uew:string = 'kobe'){
        console.log(`我的偶像:${uew}`)
    }
 }
class Book extends Back{
    bum(){
         console.log(`hello!`)
    }
}
const vo = new Book()
vo.num('james') // 我的偶像:james
vo.bum() // hello 

其实Back是父类,Book是子类,通过使用extends来继承,例如Book类继承了Back类,这样可以创建Book类,Book里有两个方法,分别是num和bum。

3.修饰符

typescript类的修饰符有四个,分别是public、readonly、private、protected。

(1)public 其实public是默认的,在类中定义字段前面可以写可以不写。

class Yum{
    public age:number
    public constructor(ages:number){
     this.age = ages
    }
  }
    
 // OR
 
 class Yum{
     age:number
     constructor(ages:number){
     this.age = ages
    }
}

可以看到,这两例代码区别在于可以写public也可以不写的。

(2)readonly readonly表示是只读的,只读必须在类中构造函数里参数被初始化。

class Vbs{
    readonly love:string;
    constructor(loves:string){
       this.love = loves
    }
}
let bb = new Vbs('bill'); // true ,输出为bill
bb.love = 'yuyu' // error ,因为love被评为只读属性

(3)private 如果字段加上了private私有属性,那么它的类不能访问外部的类。

class FYT{
    private ui:string;
    constructor(uis:string){
       this.ui = uis
    }
}
let cc = new FYT('bill');
cc.ui// error ,因为love被评为私有属性

(4)protected 这种protected属性比较少用,protected和private有点类似,但是区别在于拥有protected的字段名在子类可以访问的,代码如下:

class Back{
    protected name:string
    num(uew:string){
       this.name = uew
    }
}
class Book extends Back{
    private age:number
    constructor(name:string,age:number){
        super(name)
        this.age = age
    }
    info(){
        console.log(`我的姓名是${this.name},年龄${this.age}`)
      }
 }
 let qq = new Book("james",18)
 console.log(qq.info()) //我的姓名是james,年龄18
 qq.name // 错误,因为Back类不能使用name

可以看到例上的代码,我们从Book子类继承了Back父类,这样可以通过Book子类方法可以访问的。