es6 Class类的理解

------------恢复内容开始------------

 

概念:

class类是es6的一种构造函数语法糖写法。

创建一个class类

class myClass{
//构造器,默认为空的构造器 //当class在被new时就会调用构造器 //相当于function //function myClass(name,age){ // this.name=name // this.age=age //}
  //

  //name : string; //类的属性
  //age:string
  constructor(name,age){ //这些都是实例属性 //只有实例才能访问 this.name=name this.age=age } }
  //类的方法
  greeting() {};
//定义于 constructor 内的属性和方法,即定义在 this 上,属于实例属性和方法,否则属于原型属性和方法。在TypeScript中,是不允许直接在constructor中定义变量的,需要在constructor上面先声明。
  使用 class 定义类,使用 constructor 定义构造函数。
通过 new 生成新实例的时候,会自动调用构造函数。
 

 

创建类实例对象

var i=new myClass('小明'18)

 

类的继承

使用 extends 关键字实现继承,子类中使用 super 关键字来调用父类的构造函数和方法(super需要同步父类的参数个数?)

//动物类
 class  AnimalClass {
 private  name : string;
 public constructor(theName:string){
    this.name = theName;
};
 public  move(movedistance : number = 0){
 console.log(`${this.name} 移动的距离是 ${movedistance}`);
};
 }
 //蛇继承了动物类
 class Shake extends AnimalClass{
   constructor(name : string){
        super(name);   //初始化父类
      // 如果在子类中写了构造函数,相当于重写了父类的构造函数。 // 在子类构造函数中必须对父类的构造函数进行调用, // 否则父类的构造函数不会执行
}; move(movedistance:number =5){ console.log("Shake..."); super.move(movedistance); } } //马继承了动物类 class House extends AnimalClass{ constructor(name : string){ super(name); }; move(movedistance:number =10){ console.log("House..."); super.move(movedistance);
// 在类的方法中super就表示调用当前类的父类方法 } } let shake
= new Shake(""); let house : AnimalClass = new House(""); shake.move(); // 多态 house.move(50); // 多态



修饰符

typeScript 可以使用三种访问修饰符(Access Modifiers),分别是 public、private 和 protected。

public 修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 public 的
private 修饰的属性或方法是私有的,不能在声明它的类的外部访问

protected 修饰的属性或方法是受保护的,它和 private 类似,区别是它在子类中也是允许被访问的

 

 

 class  AnimalClass {
//只有当前类可以访问
private  _animalName : string;
public constructor(theName:string){
    this._animalName = theName;
};
//子类可以访问
protected  move(movedistance : number = 0){
 console.log(`${this._animalName} 移动的距离是 ${movedistance}`);
};
private jump(distance : number = 0){
    console.log(`${this._animalName} jummp ${distance}`);
}
 // getter setter存取器
set animalName(aName : string){
     this._animalName = aName;
}
get  animalName(){
    return this._animalName;
}
}

 

静态方法、静态属性

使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用

 
  class Animal {
   //静态属性
  static num = 42;  
   //静态方法
  static isAnimal(a) {
    return a instanceof Animal;
  }
}
let a = new Animal('Jack');
Animal.isAnimal(a); // true
a.isAnimal(a); // TypeError: a.isAnimal is not a function
console.log(Animal.num); // 42

 

 实例方法和属性

ES6 中实例的属性只能通过构造函数中的 this.xxx 来定义,ES7 提案中可以直接在类里面定义

class Animal {
//实例属性
name = 'zibin';
constructor() {
    // ...
}
}
 //实例方法
run() {};
let a = new Animal();
console.log(a.name); // zibin

类的类型

 

类可以作为数据类型的,如上图所示,我们将Person作为p1的类型,此时p1必须完全按照Person的类型来进行约束。

 

 

 

------------恢复内容结束------------

posted on 2022-05-12 13:57  SE7EN_96  阅读(142)  评论(0编辑  收藏  举报

导航