Skip to content

class类

ts
class Person {
    name: string = '小郑'
    age = 18
    static sex: number = 1
    // 只读属性 => 无法修改
    readonly password: number = 123456
    // 静态只读属性
    static readonly password2: number = 123456

    // 实例方法
    sayHi() {
        console.log('hi');
    }

    // 静态方法
    static sayHi() {
        console.log('hhh');
    }
}

const person = new Person()

console.log(person);
person.name = '修改了...';
console.log(person.name);
// person.password = 666;
console.log(person.password);
// console.log(person.sex);
console.log(Person.password2);
console.log(person.sayHi);
console.log(Person.sayHi);

构造函数和this

ts
class User {
    name: string
    age: number

    // 构造函数,对象创建时调用
    constructor(name: string, age: number) {
        console.log("xx:", this);
        this.name = name
        this.age = age
    }

    sayHi() {
        console.log("hi");
    }

}

const user = new User('小郑', 18)
user.sayHi()
console.log(user);

继承

ts
// (function () {

class Animal {
    name: string
    age: number

    constructor(name: string, age: number) {
        this.name = name
        this.age = age
    }

    sayHi() {
        console.log("hi");
    }
}

class Dog extends Animal {
    sayHi() {
        console.log("hi dog ...");
    }
    eat() {
        console.log("eat dog ...");
    }
}

const dog = new Dog('小狗', 18)
dog.sayHi()
dog.eat()
console.log(dog);

// })

super

ts
class P {
    name: string
    age: number

    constructor(name: string, age: number) {
        this.name = name
        this.age = age
    }

    sayHi() {
        console.log("hi");
    }
}

class UserA extends P {
    // 子类构造函数中需要调用super
    constructor(name: string, age: number) {
        super(name, age)
        this.name = name
        this.age = age
    }
    sayHi() {
        super.sayHi()
        console.log("hi userA ...");
    }
}

const userA = new UserA('小郑', 18)
userA.sayHi()
console.log(userA);

抽象类

ts
// 抽象类,无法new
abstract class AbsParent {
    name: string
    age: number
    constructor(name: string, age: number) {
        this.name = name
        this.age = age
    }
    // 抽象方法
    abstract sayHi(): void
}

class AbsChild extends AbsParent {
    sayHi() {
        console.log("hi child ...");
    }
}

const absChild = new AbsChild('小郑', 18)
absChild.sayHi()

属性封装

ts
class User {
    // 公共属性
    public _name: string
    // 私有属性
    private _age: number
    // 当前类和子类才能访问
    // protected _sex: number

    constructor(name: string, age: number) {
        this._name = name
        this._age = age
    }

    // setAge(age: number) {
    //     this._age = age
    // }
    // getAge() {
    //     return this._age
    // }

    get age() {
        return this.age
    }
    set age(age: number) {
        this._age = age
    }

}

const user = new User('小郑', 18)
user._name = 'hhh'
// user.setAge(11)
user.age = 11
console.log(user);



class Simple {
    constructor(public name: string) { }
}

const s = new Simple('hhh')
console.log(s);