Typescripe入门__4__类

510 阅读3分钟

0、介绍

传统的javascript程序使用函数和基于函数的继承来创建可重用的组件,
但对于熟悉使用面向对象的程序员来讲有些棘手,因为他们用的是基于类
的继承并且对象是由类构件出来的。

1、类

class Person{ 
  name:string; 
  age:number;  
 constructor(name:string,age:number){ 
      this.name = name;  
     this.age = age; 
  } 
  introduce(){      
 console.log("Hello, My Name is "+this.name+" , I am "+this.age +" years old"); 
  }
}
let per = new Person("Tom",24);//Hello My Name is Tom,I am 24 years old;

2、继承

基于类的程序设计中一种最基础的模式是允许使用继承来扩展现有的类。

// 基类
class Animal = {
    go(){   
    console.log("Animal go!"); 
   }
}

// 派生类、子类、超类
class Dog extends Animal{ 
    bark(){      
  console.log("Dog bark!")
     } 
 }
const dog = new dog();
dog.go();//Animal go!
dog.bark();//Dog bark! 

3、public、private、protected

1、public
Typescript里,成员默认是public,在当前类、子类、类的外部都可以使用。
2、private
不能在声明他的类的外部被访问、也不能在其派生类中被访问。
 3、protected
不能在声明他的类的外部被访问、但是可以在派生类中可以被访问。
4、readonly修饰符
可以使用 readonly关键字将属性设置为只读的;
只读属性必须在声明时或构造函数里被初始化。

4、存储器/访问器

TypeScript支持通过getters/setters来截取对对象成员的访问。
有效的控制对对象成员的访问。

class Employee {  
  private _fullName: string;  
  get fullName(): string {   
     return this._fullName;  
  }   
 set fullName(newName: string) {  
      this._fullName = newName;    
}
}
let employee = new Employee();
employee.fullName = "Bob Smith";

5、静态属性

static
仅当在被实例化的时候才会被初始化的属性

class Dog(){  
  static type='purou';
}

6、抽象类

abstract 用于定义抽象类和在抽象类中定义抽象方法
抽象类作为其他派生类的的基础类使用,一般不会被实例化。
不同于接口,抽象类可以包含成员的实现细节

abstract class Animal{ 
    abstract bark(): void;  
    run():void{     
     console.log("run);  
    }
}
抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。
抽象方法与接口方法类似,两者都是定义方法签名单不包含方法本体.

class dog extends Animal{  
  constructor(){     
   super();// 必须在派生类的构造函数中调用super()
    }   
 speak(){  
      console.log("speak");
    }   
 fly():void{   
     console.log("fly"); 
   }   
 bark():void{   
     console.log("bark");
    }
}
let animal:Animal; // 允许创建一个抽象类型的引用
animal = new Amimal();// 错误,不能创建一个抽象类的实例
animal = new Dog();// 允许对一个抽象子类进行实例化
animal.bark();//animal.run();//
runanimal.fly();// 错误,方法在声明的抽象类中不存在

7、高级技巧

 1、构造函数

当你在Typescript里,声明一个类的时候,实际上同时声明了很多东西,
a、首先是类的实例类型

class Box{   
 }
let box: Box; // Box就是box的类型
b、其次创建了一个构造函数值

 2、把类当接口来用
类定义创建了两个东西:类的实例和一个构造函数
因为类可以创建出类型,所以你能够在允许使用接口的地方使用类。

class P2{   
 x:number;  
  y:number;
}
interface Triangle extends P3{  
    z:number;
}
let p3 = new P3(1,2,3);