美文网首页
typescript class篇

typescript class篇

作者: 甜茶x | 来源:发表于2021-01-31 15:26 被阅读0次

    (小白学习之class篇,请多指教)

    ts中原生支持用class的方式声明一个类

    基本🌰

    
    class Person {
      name: string
      age:number
      constructor(name:string,age:number) {
        this.name = name
        this.age = age
      }
    }
    
    const xiong = new Person('xiong',18)
    console.log(xiong)
    
    

    继承

    class的继承只需要通过关键字extends即可实现继承

    
    class Person {
      eat() {
        console.log('吃饭')
      }
     }
    
    class Teacher extends Person {
      teach(){
        console.log('教学')
      }
    }  
    
    const xiong = new Teacher()
    xiong.teach() //教学
    xiong.eat() //吃饭
    
    

    class公共成员

    ts中,class的属性默认是公共属性,省略了public修饰符,公共成员在外部或者子类都可以读写

    
    class Person {
       public name = 'person'
     }
     
    const xiong = new Person()
    console.log(xiong.name) // person
    
    

    class私有成员

    ts中,class的私有成员通过private修饰符声明,私有成员只能在class内部使用,外部或者继承的类中无法使用

    
    class Person {
       private name = 'person'
     }
    const xiong = new Person()
    console.log(xiong.name) //报错
     
    class Teacher extend Person {
      teach() {
        console.log(this.name)  //报错
      }
    }
    
    

    在某些情况下,我们需要对私有数据进行读写的时候,可以采用get、set的方式实现

    
    class Person {
       private name = 'person'
      get() {
        return this.name
      }
      set(val) {
        this.name = val
        console.log('this.name',this.name)
      }
     }
    
    const xiong = new Person()
    console.log(xiong.get()) // person
    console.log(xiong.set('baby')) // baby
    
    

    受保护成员

    ts中,class通过protected修饰符来声明受保护成员,与私有成员类似(可以在class内部使用),但是不同的是,受保护成员还可以在继承的子类中使用

    
    class Person {
       protected name = 'person'
     }
     
    const xiong = new Person()
    console.log(xiong.name) // 报错
    
    class Teacher extends Person {
      teach() {
        console.log(this.name) //person
      }
    }
    
    

    只读属性

    ts中,class通过readonly关键字来声明只读属性,只读属性只能取值不能修改,无论是在class内部还是外部

    
    class Person {
       readonly name = 'person'
      setName() {
        console.log(this.name) //person
        this.name = 'changeName' //报错
      }
     }
    
    const xiong = new Person()
    console.log(xiong.name) // person
    xiong.name = 'changeName' //报错
     
    

    静态属性

    ts中,class通过static修饰符来声明静态属性,静态成员只能通过class本身调用,而不是实例

    
    class Person {
      static job = "person";
    
      consoleJob() {
        console.log(this.job); //报错
        console.log(Person.job); //person
      }
    }
    
    const person = new Person();
    console.log(person.job); //报错
    console.log(Person.job); //person
    person.consoleJob();
     
    

    相关文章

      网友评论

          本文标题:typescript class篇

          本文链接:https://www.haomeiwen.com/subject/hxijtltx.html