likes
comments
collection
share

摸鱼偷学TS:类、函数浅聊一下 作为一名时间管理大师,在摸鱼的时候顺便学习一手TS的类... 类 传统的面向对象语言基本

作者站长头像
站长
· 阅读数 19

浅聊一下

作为一名时间管理大师,在摸鱼的时候顺便学习一手TS的类...

在金三银四的尾巴上了车,如果你也和我一样也想在大三找一份还不错的实习,欢迎掘友们私聊我交流面经(wechat: LongLBond

传统的面向对象语言基本都是基于类的,虽然在ES6以后,JavaScript也拥有了class关键字,但是其本质依旧是构造函数,而在TypeScript中真正有了

抽象类

抽象类做为其它派生类的基类使用,它们一般不会直接被实例化,不同于接口,抽象类可以包含成员的实现细节。abstract 关键字是用于定义抽象类和在抽象类内部定义抽象方法

举个例子:

abstract class Animal {
    abstract makeSound(): void;
    move(): void {
        console.log('动物移动');
    }
}

class Cat extends Animal {
    makeSound(): void {
        console.log('喵喵叫');
    }
}

const cat = new Cat()
cat.makeSound()
cat.move() 

定义了一个抽象类AnimalCat继承Animal,并且重写了makeSound方法

摸鱼偷学TS:类、函数浅聊一下 作为一名时间管理大师,在摸鱼的时候顺便学习一手TS的类... 类 传统的面向对象语言基本

为什么需要抽象类

在学习抽象类的时候,我在想为什么我们需要抽象类,我让Animal成为一个普通类不是也能让Cat继承并且使用他的方法吗?就像下面这样

class Animal {
    makeSound(): void{
        console.log('动物叫');
    };
    move(): void {
        console.log('动物移动');
    }
}

class Cat extends Animal {
    makeSound(): void {
        console.log('喵喵叫');
    };
}

我发现,如果我没有重写makeSound方法,那么当cat调用makeSound方法时,打印的是动物叫,但是很明显,我们想要喵喵叫,这就体现出抽象类的重要性了

只有抽象类中才可以定义抽象方法,而抽象类中定义的抽象方法在所有继承这个类的类中都必须重写,并且由于抽象类不能实例化的问题,很贴合有些类不能实例化的场景,例如Animal,我们不会去实例化一个Animal类,但是会实例化继承AnimalCatDog类等等...

访问限定符

传统面向对象语言通常都有访问限定符,TypeScript 中有三类访问限定符,分别是: publicprivateprotected

  • public

在 TypeScript 的类中,成员都默认为 public, 被此限定符修饰的成员是可以被外部访问

class Car {
    public run() {
        console.log("小米酥妻启动...");
        
    }
}
let car = new Car();
car.run();
  • private

当成员被设置为 private 之后, 被此限定符修饰的成员是只可以被类的内部访问

class Car {
    public run() {
        console.log("小米酥妻启动...");
        
    }
    private stop() {
        console.log("小米酥妻停止...");
    }
}

let car = new Car();
car.run();
car.stop();

此时报错

摸鱼偷学TS:类、函数浅聊一下 作为一名时间管理大师,在摸鱼的时候顺便学习一手TS的类... 类 传统的面向对象语言基本

  • protected

当成员被设置为 protected 之后, 被此限定符修饰的成员是只可以被类的内部以及类的子类访问 也就是说被 protected修饰的属性或者方法只能在类的内部或者子类的内部使用

class Car {
    public run() {
        console.log("小米酥妻启动...");
        
    }
    private stop() {
        console.log("小米酥妻停止...");
    }
    protected addSpeed() {
        console.log("小米酥妻加速...");
        
    }
    add(){
        this.addSpeed();
    }
}
class Bmw extends Car {
    run() {
        console.log("宝马启动...");
        super.run();
    }
    add(){
        this.addSpeed();
    }
}

函数

函数是 JavaScript 应用程序的基础,它帮助你实现抽象层、模拟类、信息隐藏和模块。

在 TypeScript 里,虽然已经支持类、命名空间和模块,但函数仍然是主要的定义行为的地方,TypeScript 为 JavaScript 函数添加了额外的功能,让我们可以更容易地使用。

定义函数类型

在定义函数的时候,务必要确认函数的参数类型

const add  = (a:number, b:number) => a + b

函数的参数

可选参数

一个函数的某个参数可以传也可以不传,如何来处理?

const add  = (a:number, b?:number) => a + (b? b: 0)

在参数后面拼接上?来处理

默认参数

当我们需要一个默认参数时(例如计算圆的面积)

const add  = (a:number, b = 3.14) => b*a*a

剩余参数

剩余参数与JavaScript中的语法类似,需要用 ... 来表示剩余参数,而剩余参数 rest 则是一个由number组成的数组,在本函数中用 reduce 进行了累加求和

const add = (a: number, ...b: number[]) => b.reduce((acc, val) => acc + val, a);

// 正确调用 add 函数,展开数组为单独的参数
console.log(add(1, ...[1, 2, 3])); // 输出 7

结尾

摸完鱼该去吃饭了...

转载自:https://juejin.cn/post/7371687296599605299
评论
请登录