typescript ts 基础知识之类

1. 使用关键字class定义一个类

class Person { }

2. 定义类中的实例属性

通过new调用产生的实例对象可以访问

class Person{

  name:string = '名字'

  age:number = 18

}

const per = new Person()

console.log(per.name)

3. static 类属性/静态属性

通过【类名.属性名】访问,使用关键字static修饰,不需要创建实例使用,实例对象读取不到

class Person{

  name:string = '名字'

  static age:number = 18

}

const per = new Person()

console.log(per.name, Person.age)

4. readonly 只读属性

class Person{

  readonly name:string = '名字'

  static readonly age:number = 18

}

5. 定义方法

实例方法中的this表示当前调用方法的对象

class Person{
  say123(){ console.log(123)
  static say456(){ console.log(123)
}
const per = new Person()
per.say123()
Person.say456()

6. constructor 构造函数

构造函数在对象创建(new调用)时调用,函数中的this表示当前新建的实例对象

class Person{
  name:string
  age:number
  constructor(name:string, age:number){
    this.name = name
    this.age = age
  }
}
const ming = new Person('小明', 16)
const fang = new Person('小芳', 18)

7. extends 继承

class 子类 extends 父类 { }

使用继承后,子类将会拥有父类的所有方法和属性;通过继承,我们可以将多个类中共有的代码写在一个父类中,这样只需要写一次即可让所有子类都同时拥有父类中的属性和方法

若想在子类中添加独有的属性或方法,直接写即可。如果在子类中添加了父类中同名方法,则子类方法会覆盖掉父类中的方法,我们称之为方法重写

class Animal{
  name:string
  age:number
  constructor(name:string, age:number){
    this.name = name
    this.age = age
  }
  sayHi(){
    console.log('动物再叫!')
  }
}
class Dog extends Animal{
  run(){
    console.log(this.name+'在跑~')
  }
}
class Cat extends Animal{

}
const cat = new Cat('小猫', 2)
const dog = new Dog('小狗', 3)
dog.run()
// cat.run() //报错
cat.sayHi()

在子类方法中引用父类方法,用super关键字表示当前类的父类

class Dog extends Animal {

    sayHi(){ super.sayHi() }

}

如果在子类中写了constructor构造函数,需要在子类构造函数中对父类的构造函数进行调用,super()

class Animal{

  name:string

  constructor(name:string){  this.name = name }

}

class Dog extends Animal{

  age:number

  constructor(name:string, age:number){

    super(name)

    this.age = age

  }

}

8. abstract 抽象类

以abstract关键字开头的类是抽象类,是专门用来继承的类,不能用来创建对象

抽象类中可以添加抽象方法,只定义结构,不定义具体实现。抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写

abstract class Animal{

  name:string

  constructor(name:string){

    this.name = name

  }

  abstract sayHi():void

}

class Dog extends Animal{

  sayHi(): void { ... }

}

9. 属性修饰符public/private/protected

可以在属性前添加属性修饰符,用来对属性做限制,这是ts独有的,js会忽略

public 修饰的属性可以在任意位置访问、修改,是默认值,不写即为public

private 私有属性,只能在类内部进行访问、修改,继承了此类的子类也不能用

protected 受保护的属性,只能在当前类和当前类的子类中可以访问、修改

class Person{

  public name:string

  private age:number

  constructor(name:string, age:number){

    this.name = name

    this.age = age

  }

}

const p = new Person('小明', 18)

p.name = '小红'

// p.age = 19  // 报错age是私有属性,只能在类Person中使用

我们可以通过添加方法使得私有属性可以被外部访问、修改 

class Person{

  private age:number

  constructor(age:number){

    this.age = age

  }

  //定义方法,用来获取年龄

  getAge(){ return this.age }

  //定义方法,修改年龄

  setAge(value:number){ //自定义修改方法,可以对value值做判断处理 }

}

const p = new Person('小明', 18)

console.log(p.getAge())

p.setAge(18) 

以上方法使用时需要 p.getAge() p.setAge(18),改变了我们平时的使用习惯,在ts中可以如下设置

 class Person{

  private _name:string

  constructor(name:string){

    this._name = name

  }

  get name(){ return this._name }

  set name(value:string){ this._name = value}

}

const p = new Person('小明')

p.name = '小红'

简便写法:

 class Person{

  constructor(public name:string, private age:number, protected gender:string){

  }

}

const p = new Person('小明', 18, '男')

猜你喜欢

转载自blog.csdn.net/weixin_59128282/article/details/125974606
今日推荐