基本用法
class Person {
name: string // 2. 需要先在类里面声明成员,再通过this访问
age: number = 18 // 3. 如果没有在构造函数中赋值,需要赋一个初始值
constructor(name: string, age: number) {
this.name = name // 1. 直接通过this访问/添加name成员会报:类型“Person”上不存在成员“name”。
}
}
const person = new Person('jack', 18)
console.log(person.name, person.age);
访问修饰符
用于确定成员的可访问范围。
public:公共成员(默认)。
private:私有成员-类内部才能访问,不能通过实例访问。
protected:受保护的成员-只能在类内部和子类中才能访问。
class Person {
name: string // 不加的情况下默认是public
age: number
public gender: string = '男'
private address: string = '广州'
protected height: number = 180
constructor(name: string, age: number) {
this.name = name
console.log('子类super调用', this.name); // tom
}
}
const person = new Person('jack', 18)
console.log(person.name, person.age);
// console.log(person.address); // 私有成员不能在Person外部访问
// console.log(person.height); // 受保护的成员只能在Person类内部和子类中才能访问
class Man extends Person {
constructor(name: string, age: number) {
super(name, age) // 通过super调用父类中的构造函数
console.log(this.height); // 受保护的成员可以在子类中访问
}
}
const man = new Man('tom', 20)
只读成员
class Person {
name: string
age: number = 18
public gender: string = '男'
private address: string = '广州'
protected height: number = 180
// 类的只读成员:加readonly(如果有修饰符需要写在修饰符后面)
protected readonly hobby: string = '乒乓球'
constructor(name: string, age: number) {
this.name = name
console.log('子类super调用', this.name); // tom
}
}
const person = new Person('jack', 18)
console.log(person.name, person.age);
// console.log(person.address); // 私有成员不能在Person外部访问
// console.log(person.height); // 受保护的成员只能在Person类内部和子类中才能访问
// person.hobby = 'love' // 只读成员不能被修改
class Man extends Person {
constructor(name: string, age: number) {
super(name, age) // 通过super调用父类中的构造函数
console.log(this.height); // 受保护的成员可以在子类中访问
}
}
const man = new Man('tom', 20)
网友评论