TypeScript函数和类的基本使用

函数

函数的基本使用

函数是JavaScript应用程序的基础,在TypeScript中虽然已经支持类,命名空间和模块,但函数仍然是主要的定义行为的地方。

1.匿名函数

关键字 变量名 = function(参数:参数类型):返回值类型{操作语句}

2.有名函数 | 命名函数 | 普通函数

function 函数名(参数:参数类型):返回值类型{操作语句}

3.箭头函数

关键字 变量名 = (参数:参数类型)=>{语句}

4.接口类型

(函数的约束):type 别名 = (字面量1:类型,字面量2:类型)=>返回值类型

(函数的具体实现):关键字 函数名:变量名 = (形参1:类型,形参2:类型)=>操作语句

函数参数的处理

可选参数:在参数后面写?,调用时可以不传参,也可以将undefined传给可选参数

const fn = (a:number,b?:number)=>{
    // return a+b//可运算,书写时报错
    return a
}
console.log(fn(1));

参数默认值:当参数有默认值,不传参时调用默认值,传参时调用传递的参数

const fn1 = (a:number,b:number=100)=>{
    return a+b
}
console.log(fn1(50));

剩余参数:...args,剩余参数可以指定类型,例如...args:any[],将剩余的参数放在数组中

const fn2 = (a:number,b:string,...c:any[])=>{
    console.log(a);
    console.log(b);
    console.log(c);
}
fn2(18,"张","金","玉",419511)

构造函数

语法格式:var 变量名 = new Function(参数1,参数2,函数体)

var fn = Function("a","b","return a>b?a:b")
console.log(fn(100,50));

函数重载

重载是方法名字相同,而参数不同,返回类型可以相同也可以不相同

如果参数类型不同,则参数类型应设置为any

参数数量不同可以将不同的参数设置为可选参数

例:

export default{}
// 函数重载
// 类型不同
function fn1(a:string,b:string):string
function fn1(a:number,b:number):number
function fn1(a:string,b:number):string
function fn1(a:number,b:string):string
​
function fn1(a:any,b:any):any{
    return a+b
}
console.log(fn1(1,2));
console.log(fn1("1","2"));
console.log(fn1("1",2));
console.log(fn1(1,"2"));
​
// 数量不同
function fn2(a:string):string;
function fn2(a:number,b:number):number;
​
function fn2(a:any,b?:number){
    return a
    return b
}
console.log(fn2("oooo"));
console.log(fn2(1,2));

类的使用

类的基本使用

类描述了所创建的对象共同的属性和方法

定义类的关键字为class,后面紧跟类名(首字母大写)

类的数据成员:

字段(属性)--是类里面声明的变量表示对象的有关数据

构造函数 --constructor是类里面的构造函数,类实例化时调用,可以为类的对象分配内存

方法(函数) --对象要执行的操作

//示例
export default{}
​
// 创建一个类
class Person {
    name:string;
    age:number;
​
    // 构造函数
    constructor(name:string,age:number){
        this.name=name;
        this.age=age
    }
​
    // 方法函数
    fn():void{
        console.log(`她叫${this.name},今年${this.age}岁`);
    }
}
// 实例化
let p = new Person("张三",22);
p.fn()

类的继承

可以在创建类的时候继承一个已存在的类

已存在的类为父类,继承他的为子类

继承类的关键字是extends

子类除了不能继承父类的私有成员(方法和属性)和构造函数,其他的都可以继承

在ts中一次只能继承一个类,不支持继承多个类,但可以多重继承

super用来调用父类中的成员(构造函数和方法等)

export default{}
​
// 创建一个类
class Person {
    name:string;
    age:number;
​
    // 构造函数
    constructor(name:string,age:number){
        this.name=name;
        this.age=age
    }
​
    // 方法函数
    fn():void{
        console.log(`她叫${this.name},今年${this.age}岁`);
    }
}
​
class Major extends Person{
    major:string;
​
    // 构造函数
    constructor(name:string,age:number,major:string){
        // 继承父类的构造函数
        super(name,age);
        this.major=major
    }
​
    // 方法函数
    fn2():void{
        // 调用父类的方法
        super.fn()
        console.log(`她叫${this.name},今年${this.age},学习的专业是${this.major}`);
    }
}
let m = new Major("贝贝",22,"语文教育")
m.fn2()

static与instanceof

static关键字用于定义类的数据成员为静态的,静态成员可以直接通过类名调用

instanceof运算符用于判断对象是否是指定的类型,返回布尔值

类的修饰符

public(默认):公有可以在任何地方访问

protected:受保护,可以被其自身以及子类访问

private:私有,只能被其定义所在的类访问

readonly:可以使用readonly关键字将属性设置为只读的。只读属性必须在声明时或构造函数里被初始化。

getter与setter

又称 存取器,通过getter与setter来截取对对象成员的访问

  • 如果存在get,但没有set,则该属性自动是只读的

  • 如果没有指定setter参数的类型,他将从getter的返回类型中推断出来

  • 访问器和设置器必须有相同的成员可见性

抽象类

定义

  • 抽象类作为其他派生类的基类使用。它们一般不会直接实例化

  • 抽象类是专门用于定义那些不希望被外界直接创建的类的

  • 和接口一样用于约束子类的

抽象类和接口的区别

  • 抽象方法必须包含abstract关键字,并且可以包含访问修饰符

  • 接口中只能定义约束,不能定义具体实现。

  • 抽象类既可以定义约束,也能定义具体实现

implements子句

类的初始化顺序

基类的字段被初始化 => 基类构造函数运行 => 子类的字段被初始化 => 子类构造函数运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值