先说说类(class)的理解,其实是为了便于面向对象的写法,通过原型链用来继承共同的组件以及方法,都是通过构造函数来生产类(class)
1.类的基础
类的模块主要是有三种分别是:字段(声明变量)、构造函数(当实例化就调用)、方法(为对象的执行方法)。代码如下:
class Info{
// 字段
name:string,
// 构造函数
constructor(name:string){
this.name = name
}
// 方法
code():void{
console.log(`我的姓名是:${this.name}`)
}
}
// 创建一个对象
const unf = new Info('james')
unf.code() // 我的姓名是james
构造函数的参数名称和字段可以写不同的名称,this.name就是类的字段,this是指向当前的对象。
2.继承
在我们的类中使用继承相当于重要的,因为它们可以扩大各种的类以及方法。代码如下:
class Back{
num(uew:string = 'kobe'){
console.log(`我的偶像:${uew}`)
}
}
class Book extends Back{
bum(){
console.log(`hello!`)
}
}
const vo = new Book()
vo.num('james') // 我的偶像:james
vo.bum() // hello
其实Back是父类,Book是子类,通过使用extends来继承,例如Book类继承了Back类,这样可以创建Book类,Book里有两个方法,分别是num和bum。
3.修饰符
typescript类的修饰符有四个,分别是public、readonly、private、protected。
(1)public 其实public是默认的,在类中定义字段前面可以写可以不写。
class Yum{
public age:number
public constructor(ages:number){
this.age = ages
}
}
// OR
class Yum{
age:number
constructor(ages:number){
this.age = ages
}
}
可以看到,这两例代码区别在于可以写public也可以不写的。
(2)readonly readonly表示是只读的,只读必须在类中构造函数里参数被初始化。
class Vbs{
readonly love:string;
constructor(loves:string){
this.love = loves
}
}
let bb = new Vbs('bill'); // true ,输出为bill
bb.love = 'yuyu' // error ,因为love被评为只读属性
(3)private 如果字段加上了private私有属性,那么它的类不能访问外部的类。
class FYT{
private ui:string;
constructor(uis:string){
this.ui = uis
}
}
let cc = new FYT('bill');
cc.ui// error ,因为love被评为私有属性
(4)protected 这种protected属性比较少用,protected和private有点类似,但是区别在于拥有protected的字段名在子类可以访问的,代码如下:
class Back{
protected name:string
num(uew:string){
this.name = uew
}
}
class Book extends Back{
private age:number
constructor(name:string,age:number){
super(name)
this.age = age
}
info(){
console.log(`我的姓名是${this.name},年龄${this.age}`)
}
}
let qq = new Book("james",18)
console.log(qq.info()) //我的姓名是james,年龄18
qq.name // 错误,因为Back类不能使用name
可以看到例上的代码,我们从Book子类继承了Back父类,这样可以通过Book子类方法可以访问的。