TypeScript 中类的值,拥有 private, protected, public 三种访问类型
public 代表在类内外都可调用类的属性
private 代表只可以在类内部调用类的属性
protected 代表可以在类内和继承的子类中调用父类中的属性
来看看如何书写
class Man {
public name: string;
private age: number;
protected say() {
this.name
}
}
访问类型默认为写在属性值的前边 , 如果不写,则默认为 public 访问类型。
再来看看什么是类的内部,外部,和被继承的子类内部
class Man {
public name: string
private age: number
protected say():{
console,lob(this.name) // 在类内就是在 class 的大括号内
}
}
const man = new Man()
man.name = 'lei' // 类内的name属性在类外部被调用 可以被调用 因为name为public访问类型
class Women extends Man {
public sayHi() {
this.name // 可以访问 被继承的子类内部访问父类的 public 访问类型
this.say() // 此时这里会报错 ,因为父类中的 say 方法是 protected 访问类型,仅可在父类内部访问
}
}
上边就是类的三种访问类型
下边看一下类中的构造器 constructor
在实例化类的时候,构造器会被调用,如果构造器需要参数,则在实例化的时候传入参数,构造器会接收到
class Man {
constructor(public name: string) {}
}
const man = new Man('lei') // 实例化时构造器将被执行,传入字符串参数
在构造器中,构造器的参数可同时被声明为类中的属性,简化写法,来看看传统写法和简化写法
class Man {
// 传统写法
public name: string
constructor(name: string) {
this.name = name
}
// 简化写法
constructor(public name: string) {} // 等价于上边的传统写法
}
在子类中调用父类的构造器用 super 调用 ,而且在子类中使用构造器, 必须在构造其中调用 super ,即使父类中没有构造器 , 也必须在子类的构造其中调用 super
class Man {
public name: string
constructor(name: string) {
this.name = name
}
}
class WoMen extends Man {
constructor() {
super('lei')
}
}
如果父类构造器有形参,则super需要传入实参,super的参数将会传入父类构造器的形参
OK!! 下一次说一下我们为什么要为类写入访问类型呢 ,它的作用是什么
886