TypeScript 类

        TypeScript 是面向对象的 JavaScript。类描述了所创建的对象共同的属性和方法。
        TypeScript 支持面向对象的所有特性,比如 类、抽象类、接口等。

一、类的基本使用

export default {}

// 类的基本使用

class Person {
    // 字段(属性)
    name: string
    age: number

    // 构造函数
    constructor(name: string, age: number) {
        this.name = name
        this.age = age
    }

    // 函数(方法)
    sayHello(): void {
        console.log(`我的女神是${this.name},她今年${this.age},在我心里她永远十八岁`);
    }
}
// 实例化类
let p = new Person("王祖贤",50)
p.sayHello()

二、类的继承

export default{}

class Person {
    // 字段(属性)
    name: string
    age: number

    // 构造函数
    constructor(name: string, age: number) {
        this.name = name
        this.age = age
    }

    // 函数(方法)
    sayHello(): void {
        console.log(`我的女神是${this.name},她今年${this.age},在我心里她永远十八岁`);
    }
}
class Student extends Person {
    score:string;

    constructor(name: string, age: number,score:string) {
        // 调用父类中的构造函数
        super(name, age)
        this.score =score;
    }
    sayHello(): void {
        // 调用父类中的方法
        super.sayHello()
        // 重写父类中的方法
        console.log(`我是重写的方法,我叫${this.name},今年${this.age}岁,我的成绩是${this.score}`);
    }
}

let s = new Student("赵丽颖",18,"A")
s.sayHello()

三、static与instanceof

export default {}

class StaticTest {
    static salary: number
    static say(): void {
        console.log(`我们想要的工资是${StaticTest.salary}k`);

    }
}
StaticTest.salary = 18
StaticTest.say()

class Person{}
let p = new Person()
let isPerson = p instanceof Person
console.log("p是Person实例化出来的吗",isPerson);

class Student extends Person{}
let s = new Student()
let isStudent = s instanceof Student
console.log("s是Person实例化出来的吗>",isStudent);

四、类的修饰符

        1、public修饰符

        当我们写一个类时,如果没有添加修饰符,那么类中成员就会有默认的修饰符public,表示公共的,在任何位置都可以访问该成员,在外部如a.name,在子类的内部(通过this.name)

class Person{
       public name:string;
       public age:number;
       public constructor(name:string,age:number){
            this.name=name;
            this.age=age;
        }
       public say(){
            console.log(`my name is ${this.name}`)
        }
    }

var a=new Student('小明',23)

        2、private修饰符

                使用private修饰的成员
                外部无法访问这个成员
                子类中也无法访问这个成员

class Person{
       private name:string;
        age:number;
        constructor(name:string,age:number){
            this.name=name;
            this.age=age;
        }
        say(){
            console.log(`my name is ${this.name}`)
        }
    }
    class Student extends Person{
        constructor(name:string,age:number){
            super(name,age)
        }
        say(){
            super.say();
            console.log('呵呵',this.name)//在子类中使用private的属性将报错
        }
    }
    var a=new Student('小明',23)
    console.log(a.name)//在外部使用private的属性将报错

        3、protected修饰符

                使用protected修饰的成员
                在外部无法访问这个成员
                但是在子类中可以访问这个成员

        4、readonly修饰符

                使用readonly修饰的成员
                在外部不能修改
                在类的普通方法中,也不能修改
                只有在类的构造函数中才能进行修改赋值

五、getter与setter

export default {}

class MyName {
    private _fullName: string = "杨幂";

    // 读取字段的值
    set fullName(newName: string) {
        console.log("set被调用了");
        this._fullName = newName;
    }
    // 为字段赋值
    get fullName() {
        console.log("get被调用了");
        return this._fullName;
    }
}

let n = new MyName();
n.fullName = "刘亦菲" //赋值

console.log(n);

console.log(n.fullName); //取值

六、抽象

export default {}

abstract  class Person {
    abstract name: string;
    abstract age: number;
    abstract show():string;

    showName():void{
        console.log("Hello world!");
    }
}

class Student extends Person {
    name: string="王祖贤";
    age: number=18;
    show():string {
        return "港风电影"
    }
}

// let p = new Person();

let s = new Student();
let res = s.show()
console.log(res);

七、类的初始化顺序

export default{}

class Old{
    name:string="李易峰";
    constructor(){
        console.log(`我是${this.name},我主演了古剑奇谭`);
        
    }
}

class Young extends Old{
    name:string="刘亦菲";
    constructor(){
        super();
        console.log(`我是${this.name},我主演了天龙八部`);
        
    }
}

let y = new Young();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值