TS 类

189 阅读2分钟

使用class关键字定义一个类

/*
*   对象中主要包含了两个部分:
*    属性
*    方法
*/
class Person{
   /*
   * 直接定义的属性是实例属性,需要通过对象的实例访问:
   *  const per = new Person();
   *  per.name
   
   /*
   // 定义实例属性
   name:string = 'tom';
   age:number = 12
   
   // 在属性前使用static关键字可以定义类属性(静态属性)
   访问使用Person.age
   static age:number = 12;
   
   // 定义方法
   /*
   *如果方法以static开拓则方式是类方法,可以直接通过类去调用
   */
   sayHello(){
      console.log('你好')
   }
}

const per = new Person()
// 访问实例属性
console.log(per.name)   // tom
// 访问静态属性
console.log(Person.age)   // 12


// 实例属性可以修改
per.name = 'suddy'
console.log(per.name) // suddy


类的继承

// 立即执行函数
(function (){
  
  // 定义一个类
  class Dog{
   name:string;
   age:number;
   
   constructor(name:string,age:number){
      this.name = name ;
      this.age = age;
   }
   
   sayHello(){
      console.log('你好')
   }
  }
  // 定义一个类
  class Cat{
    name:string;
    age:number;
    constructor(name:string,age:number){
       this.name = name;
       thia.age = age;
    }
    asyHello(){
      console.log('你好啊')
    }
  }
  
})();

综上:发现两个类有公共的属性和方法,可以合并为一个 如下:

class Animal{
    name:string;
    age:number;
    constructor(name:string,age:number){
       this.name = name;
       thia.age = age;
    }
    asyHello(){
      console.log('语言')
    }
}


// Dog继承
/*
* - Animal被称为父类,Dog被称为子类
* - 使用继承后,子类将会拥有父类所有的方法和属性
* - 通过继承可以将多个类中共有的代码写在一个父类中
* - 这样只需要写一个即可让所有的子类都同时拥用父类的属性和方法
* - 如果希望在子类中添加一些父类中没有的属性或方法直接添加即可
* - 如果在之类中添加了和父类相同的方法,则子类方法会覆盖掉父类的方法
* - 这种子类覆盖掉父类方法的形式,称为方法重写
*/
class Dog extends Animal{

    run(){
      console.log('${this.name} + 在跑')
    }
    sayHello(){
     console.log('hello')
    }
}

console.log(dog.run())

抽象类

/*
* - 以abstract开头的类是抽象类
* - 抽象类和其他类区别不大,只是不能用来创建对象
* - 抽象类就是专门用来被继承的类
* - 抽象类可以添加抽象方法
*/
abstract class Animal{
  //  定义一个抽象方法
  // 抽象方法使用abstract开头,没有方法体
  // 抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写
  abstract sayHello():void;
}
class Dog extends Animal{
}
const an = new Animal()