TS中面向对象的基本使用

概要

本文主要深入学习TS的语法,了解TS中面向对象的基本使用,了解TS中类的成员修饰符public等,了解当属性为私有时修改时使用getter,setter等知识

四.TS的面向对象

1.类的基本使用

class Person {
    // 想要赋值前,需要先定义
    name: string
    age: number

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

    info(){
        console.log(this.name, this.age);
        
    }
}

const p = new Person('wuu', 20)

p.info()

export{}

2.类的成员修饰符

在TypeScript中,类的属性和方法支持三种修饰符: public、private、protected、readonly

 public 修饰的是在任何地方可见、公有的属性或方法,默认编写的属性就是public的;

 private 修饰的是仅在同一类中可见、私有的属性或方法;

 protected 修饰的是仅在类自身及子类中可见、受保护的属性或方法;

 readonly 如果有一个属性我们不希望外界可以任意的修改,只希望确定值后直接使用

class Person {
    // 想要赋值前,需要先定义
    public name: string
    private age: number
    constructor(name: string, age: number){
        this.name = name
        this.age = age
    }

    private info(){
        console.log(this.name, this.age);
        
    }
}

const p = new Person('wuu', 20)

// p.info()  私有属性,不能访问,报错
console.log(p.name);


export{}

3.类使用时的语法糖

  • 可以通过在构造函数参数前添加一个可见性修饰符 public private protected 或者 readonly 来创建参数属性,最后这些类属性字段也会得到这些修饰符;
class Person {
    // 赋值前参数有修饰符,可以不用提前定义
    constructor(public name: string, public age: number){
        this.name = name
        this.age = age
    }

    private info(){
        console.log(this.name, this.age);
        
    }
}

const p = new Person('wuu', 20)

// p.info()  私有属性,不能访问,报错
console.log(p.name);


export{}

4.getter和setter

◼ 在前面一些私有属性我们是不能直接访问的,或者某些属性我们想要监听它的获取(getter)和设置(setter)的过程,这个时候我们可以使用存取器。

  • 什么时候用私有
    • 当需要属性值修改时,需要进行拦截时
    • 比如:年龄的值不能小于0,因此把age设置为私有属性,当set调用时,进行判断,是不是把age设置为小于0的
class Person {
    // 赋值前参数有修饰符,可以不用提前定义
    constructor(private _name: string, private _age: number){
        this._name = _name
        this._age = _age
    }
    
    get name() {
        return this._name
    }
    set name(newValue) {
        this._name = newValue
    }
}

const p = new Person('wuu', 20)

// _name为私有属性,可以通过get和set访问
console.log(p.name);


export{}

5.抽象类和抽象方法(了解)

typescript中的抽象类是提供其他类继承的基类,不能被实例化

用abstract关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现(即Animal类利用abstract关键字定义为抽象类和抽象方法,但是抽象方法要在其继承Animal类的Dog类中去实现)

这种做法类似多态:父类定义一个方法不去实现,让继承的子类去实现,每一个子类有不同的表现形式

//Animal是一个抽象类,因为他使用了abstract关键字,里面含有一个eat()抽象方法
abstract class Animal {
    constructor(public name: string) {
        this.name = name
    }
    abstract eat(): any  //抽象方法前有abstract关键字,抽象方法不包含具体实现,要在继承的子类中实现
    run() {   //非抽象方法
        console.log('非抽象方法');
    }
}
 //Dog中继承了抽象类Animal,所以必须实现父类抽象方法,否则编译报错
class Dog extends Animal {
    constructor(name: string) {
        super(name)
    }
    eat() {
        console.log(this.name + "吃肉")
    }
    
}

const dog = new Dog("狗")
dog.eat()

小结

本文主要深入学习TS的语法,掌握TS中面向对象的基本使用
由于作者水平有限
如果对本文有任何疑问可以私信或者评论区发表你的看法
本文如果对你有帮助,麻烦点个赞和收藏方便回看,点点关注 谢谢

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值