Skip to content

class中的类型与构造器

js
// public 允许在类的内外部及子类继承都可以使用, 默认存在(全部允许)
// private 只允许在类的内部使用(内部允许)
// protected 允许内部和子类继承使用[v.受保护的](内部和继承的子类允许)
class Person {
    public name: string
    private age: number
    constructor(name: string, age: number) {
       this.name = name
       this.age = age
    }
    public getName(): string {
        return this.name
    }
    protected getAge() {
        return this.age
    }
}
class Chaos extends Person {
    constructor() {
        super('chaos', 18) // 必须调用一下super() ---> 父类的构造器
    }
    getNameAndAge() {
        let name = this.getName()
        let age = this.getAge() // 调用正常,在Person中或继承的子类可使用该方法
        return  name  
    }
}

// let tom = new Person('tom', 19)
// console.log(tom.age)  // 访问age报错,private age表示只能在class内部访问

let chaos = new Chaos()
// console.log(chaos.getAge()) // 调用报错,protected getAge()表示只能在父类Person中和继承的子类中使用,不能给实例用
console.log(chaos.getNameAndAge())

// constructor的简写方式(直接把类型注解写在constructor的形参中)
class Person {
    constructor(public name: string) {}
}
let tom = new Person('tom')