一、函数
定义函数类型:要指定函数参数个数、参数类型和返回值类型。之后指定变量为这个函数类型,此时可以不写函数返回值类型,它会根据返回值自动推断出类型。
在定义函数类型时,括号中为参数及其类型,多个参数用逗号隔开,括号后使用“=>”指定返回值类型。声明函数时,括号中为参数及其类型,多个参数用逗号隔开,括号后面使用“:”,指定返回值类型。
定义函数类型除了这种方式,还可以用接口。在前面学过,接口可以描述对象的“形状”,同理也可以描述函数的“形状”。参数有默认参数和可选参数,默认参数直接赋值,可选参数用“?”,可选参数必须写在必选参数后面。
二、类
类是现实世界或思维世界中的实体在计算机中的反映,它将数据(属性)以及这些数据上的操作(方法)封装在一起。 面向对象的三大特性:封装、继承、多态。
1、定义类
关键字是class,类体中声明类的成员,有字段、构造函数和方法。声明字段时,如果没有初始化,并且也没有在构造函数中也没有赋值,这时就会有报错。所以age提示有错误。声明方法时,有两种方式,一是直接写方法,二是字段式方法。
2、构造函数(constructor)
在实例化对象时,构造函数有参数,则要按规定传参,没有参数则不传参。构造函数是用来初始化一些操作以及给对象属性赋值。构造函数中this值为新实例化的对象引用, 常通过"this.字段=值"为新对象的字段赋值。
3、静态方法
静态方法是用static修饰的,且只能由类进行访问,实例化后的对象只能访问成员方法。
4、存取器set和get
get用于获取变量的值,必须有返回值,set用于对变量进行赋值,必须有一个参数。
5、继承
关键字extends,子类继承父类中的属性,一个子类只能有一个父类,一个父类可以有多个子类。子类可以访问从父类直接或间接继承下来的属性。
6、super
一个类继承一个父类并且有构造方法,则该子类必须使用super。super必须在this的前面。这是因为用子类实例化对象的过程中,先是创建父类对象,然后在父类对象基础上追加子类成员得到子类对象,然后子类构造函数先执行,子类构造函数中super(<实参>)再调用父类构造函数的执行。
class People {
behavior:string = '睡觉'
age:number
country:string
constructor(type:string,age:number){
this.country= type
this.age = age
}
speak(){
console.log('说话')
}
}
class Chinese extends People{
name:string
constructor(name:string){
super('Chinese',23)
this.name = name
}
}
let chinese = new Chinese('张三')
console.log(chinese)
//Chinese { behavior: '睡觉', country: 'Chinese', age: 23, name: '张三' }