TS基础——类成员的修饰符

注:其实这些修饰符,如private并不是真正的私有,只是在ts环境下会报错,不允许随便用,但是转译出来的js文件,还是一样的随便用。有点鸵鸟心态的意思

类中的成员修饰符:主要适用于描述类中成员(属性,构造函数,方法)的可访问性

  1. public 修饰符是默认的,可以不写出来 public eat() {} 所有成员,实例,子类都可以访问(总之就是无限制)
  2. protected 不允许实例访问,只允许内部,和子类内部访问(总之:内部,子类内部)
  3. private 类中成员和属性只允许内部访问,(子类,实例都不可以访问)(总之:自己内部)
  4. readonly 只读属性
  5. static 静态属性/静态方法,不用创建实例,直接用类名.静态属性/方法就可以访问
  6. setter 与 getter
class Dad {
    public name: string //名字(任何人可同名)
    protected gene: string  //基因(自己内部和子内部)
    private life: number  //生命(只自己做主)
    readonly age: number
    constructor(name: string, gene: string, life: number, age: number) {
        this.name = name
        this.gene = gene
        this.life = life
        this.age = age
    }
}
const dad = new Dad('dad', 'AGCT', 1)
console.log(dad.gene); //不允许
console.log(dad.life); //不允许

class Son extends Dad {
    constructor(name: string, gene: string, life: number) {
        super(name, gene, life)
    }
    use(): void {
        console.log(this.life);//不允许
    }
}
const son = new Son('son', 'AGCT', 1)
console.log(son.gene);//不允许
console.log(son.life);//不允许


/*static 用法*/
class Person {
  static name1: string = '佐助‘
  constructor() {}
  static sayHI(): void {
    console.log('HI')
  }
}
log(Person.name1) //佐助
Person.name1 = '鸣人' //允许
Person.sayHI()  //HI
Person.sayHI = function() { //允许
  log('Hello')
}

/*set 与 get 用法*/
class Person {
    private first_name: string
    private last_name: string
    constructor(first_name: string, last_name: string) {
        this.first_name = first_name
        this.last_name = last_name
    }
    get fullName(): string {
        console.log('getting...');
        return `${this.first_name}_${this.last_name}`
    }
    set fullName(name: string) {//此处不允许有返回值类型标记(void也不行)
        console.log('setting...');
        [this.first_name, this.last_name] = name.split('_')
    }
}
const Naruto = new Person('漩涡', '鸣人')
console.log(Naruto.fullName);  //漩涡鸣人
Naruto.fullName = '宇智波_佐助'
console.log(Naruto.fullName);  //宇智波佐助

posted on 2021-12-23 18:32  In-6026  阅读(405)  评论(1)    收藏  举报

导航