TS基础——类成员的修饰符
注:其实这些修饰符,如private并不是真正的私有,只是在ts环境下会报错,不允许随便用,但是转译出来的js文件,还是一样的随便用。有点鸵鸟心态的意思
类中的成员修饰符:主要适用于描述类中成员(属性,构造函数,方法)的可访问性
- public 修饰符是默认的,可以不写出来 public eat() {} 所有成员,实例,子类都可以访问(总之就是无限制)
- protected 不允许实例访问,只允许内部,和子类内部访问(总之:内部,子类内部)
- private 类中成员和属性只允许内部访问,(子类,实例都不可以访问)(总之:自己内部)
- readonly 只读属性
- static 静态属性/静态方法,不用创建实例,直接用类名.静态属性/方法就可以访问
- 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); //宇智波佐助
浙公网安备 33010602011771号