学习 TypeScript8 (Class类)

学习来源:学习TypeScrip8(Class类)_小满zs的博客-CSDN博客

ES6 提供了更接近传统语言的方法,引入了Class类 这个概念,作为对象的模板。 通过 Class 关键字,可以定义类。基本上,ES6 的Class可以看做只是一个语法糖,它的绝大部分功能,ES5都可以实现,新的 Class写法只是让对象原型的写法更加清晰、更像面向对象的编程的语法而已。上面的代码用 ES6 的类改写,就是下面这样。

// 定义类
Class Person {
    constructor (){

    }

    run(){}
}

1. 在 TS 中,是如何定义类的?

        1. 在typescript 中是不允许直接在constructor定义变量的,需要在constructor上面先声明;

        2.在1的基础上引发出第二个问题,如果定义了变量,不用,也会报错;通常是给个默认值或者进行赋值。效果如下

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

2. 类的修饰符

总共有单个 public private protected

        1.使用public修饰符,可以让你定义的变量,内部访问,也可以外部访问,如果不写,默认就是public;

        2.使用private 修饰符,代表定义的变量私有的只能在内部访问,外部不能访问;

        3.使用protected修饰符,代表定义的变量私有的,只能在内部和继承的子类中访问,不能在外部访问;

class Person {
    public name: string
    private age: number
    protected some: any
    
    constructor (name: string, ages: number, some: any){
        this.name = name
        this.age = ages
        this.some = some
    }

    run (){}
}

class Man extends Person {
    constructor (){
        super('张三', 18,1)
        console.log(this.some)
    }
    create(){
        console.log(this.some)
    }
}

let xiaoman = new Person('小满', 18, 1)
let man = new Man()

3. static 静态属性 和静态方法

        1. static 定义的属性,不可以通过this去访问,只能通过类型调用

        2.static 静态函数,同样也是不能通过this去调用,可是通过类型去调用

        3.注意:如果两个函数都是static 静态的,可以通过this互相调用

class Person {
    public name: string
    private age: number
    protected some: any
    static nb: string = '123'
    constructor (name: string, ages: number, some: any){
        this.name = name
        this.age = ages
        this.some = some
    }

    static run (){
        return this.aaa()
    }
    static aaa(){
        return 'aaaaa'
    }
}

Person.nb

4. interface 定义类

        typescript interface定义类,使用关键字 implements 后面跟 interface的名字,多个就用逗号隔开,继承还是用extends

interface PersonClass {
    get(type: boolean): boolean
}

interface PersonClass2 {
    set(): void,
    asd: string
}

class A {
    name: string,
    constructor(name: string){
        this.name = '123'
    }
}

class Person extends A implements PersonClass, PersonClass2 {
    asd: string
    constructor(){
        super()
        this.asd = '123'
    }
    get(type: boolean){
        return type
    }
    set(){}
}

5.抽象类

应用场景如果你写的类实例化之后毫无用处,此时我们可以把它定义为抽象类

或者你也可以把他作为一个基类 -> 通过继承一个派生类去实现基类的一些方法

例子如下

下面这段代码会报错,抽象类无法被实例化

abstract class A {
    public name: string
}

new A()

例子2

我们在A类定义了 getName 抽象方法,但未实现

我们B类实现了A定义的抽象方法,如不实现就不报错 我们定义的抽象方法必须在派生类实现

abstract class A {
    name: string
    constructor (name: string){
        this.name = name
    }
    print(): string{
        return this.name
    }

    abstract getName(): string
}

class B extends A {
    constractor(){
        super('小满')
    }

    getName(): string {
        return this.name
    }
}

let b = new B()
console.log(b.getName())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值