当前位置: 首页 > news >正文

TypeScript类

类的定义

类中包含属性、构造函数和方法

class Person {
    name: string
    constructor(name:string) {
        this.name = name
    }
    say(content: string){
        console.log(content)
    }
}
const p = new Person('东方不败')
p.say('hello')

继承

1、使用extends进行类的扩展,可以继承父类中的属性和方法
2、构造函数里访问 this的属性之前,我们 一定要调用 super()
3、重写了从父类继承来的方法

class Animal {
    name:string
    constructor(name: string) {
        this.name = name
    }
    move(len: number = 0){
        console.log(`${this.name}移动了${len}米`)
    }
}
class Dog extends Animal {
    constructor(name: string) {
        super(name)
    }
    move(len?: number): void {
        console.log('Dog-----')
        // super.move()
        console.log(`${this.name}移动了${len}米`)
    }
}
class Cat extends Animal {
    constructor(name: string) {
        super(name)
    }
    move(len?: number): void {
        console.log('Cat-----')
        super.move(len)
    }
}
const dog = new Dog('二哈')
const cat = new Cat('汤姆')
dog.move(500)
cat.move(200)

修饰符

public:TypeScript中默认修饰符都是public
private :当成员被标记成 private 时,它就不能在声明它的类的外部访问。
protected:与 private 修饰符的行为很相似,但有一点不同,protected成员在派生类中仍然可以访问
readonly:将属性设置为只读的。 只读属性必须在声明时或构造函数里被初始化
语法:放在属性名前面

class Animal {
    private name:string
    constructor(name: string) {
        this.name = name
    }
    move(len: number = 0){
        console.log(`${this.name}移动了${len}米`)
    }
}

参数属性

在构造函数中使用修饰符来创建和初始化成员name,声明和赋值合并到一起,其他修饰符(private、public、protected)同样适用

class Person {
    readonly id: number = 1;
    constructor(readonly name: string) {
    }
}
const p = new Person('dong')
console.log(p.name)

存取器

TypeScript 支持通过 getters/setters 来截取对对象成员的访问。

class Person {
    firstName: string = 'A'
    lastName: string = 'B'
    get fullName() {
        return this.firstName + '_' + this.lastName
    }
    set fullName(name: string) {
        let arr = name.split('_')
        this.firstName = arr[0]
        this.lastName = arr[1]
    }
}
let p = new Person()
console.log(p.fullName) // get A_B
p.fullName = '东方_不败' // set 
console.log(p.fullName) // 东方_不败

静态属性 static

类的实例成员:当类被实例化的时候才会被初始化的属性,可被类实例对象访问
静态成员:使用 static定义,存在于类的本身,不存在类的实例对象上,所以只能通过类进行访问

class Person {
    firstName: string = 'A'
    lastName: string = 'B'
    static address: Array<string> = ['北京', '朝阳']
}
let p = new Person()
console.log(Person.address)
console.log(p.address) // 报错

抽象类

1、一般不会被实例化,作为其他类的父类使用
2、abstract关键字修饰
3、不同于接口,抽象类中可以包含已经实现的方法,也可以包含未实现的抽象方法
4、抽象类中的抽象方法必须在子类中实现,抽象方法和接口类似,都是只有方法签名,没有方法体;但抽象方法必须用abstract进行修饰

abstract class Animal {
    name: string 
    abstract move(len: number):void
    eat(food: string):void {
        console.log(`${this.name}吃${food}`)
    }
    constructor(name: string) {
        this.name = name
    }
}
class Dog extends Animal {
    move(len: number): void {
        console.log(`${this.name}移动了${len}米`)
    }
}

// let animal = new Animal('动物') // 报错:无法创建抽象类的实例对象
let dog = new Dog('二哈')
dog.eat('大骨头')
dog.move(500)

相关文章:

  • this作用全解(全局this 、函数this、全局函数 this call apply bind……)
  • k8s核心资源ingress
  • 【MySQL】《狂飙》电视剧火了,如果程序一直狂飙,扛不住了,怎么办呢?
  • golang 协程关闭——谁敢说没踩过坑
  • 熵值法原理及python实现 附指标编制案例
  • Small RTOS51 学习笔记(10)Small RTOS51 的移植
  • CentOS7 LVM 逻辑卷2种读写策略(磁盘IO性能优化)—— 筑梦之路
  • 湫湫系列故事——减肥记Ⅰ(Python)
  • 分享158个ASP源码,总有一款适合您
  • 机器学习常见面试问题汇总
  • 低代码:让企业“活”起来,赋能企业数字转型
  • SAP IFRS 17 面向服务架构详细解析(包含分类账规则)
  • JavaWeb:过滤器与监听器
  • SpringBoot Log4j2日志
  • 导致商标注册失败的四大原因?
  • Arx遍历块内实体
  • 剑指 Offer II 009. 乘积小于 K 的子数组
  • GF_CLR初始用 - 正式版
  • visual studio2019 定位内存泄漏的方法
  • 懂了委托,才算真正入门C#
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉