由于面向对象比较多,所以我这儿就分两个篇章来大致的讲一下面向对象特性,首先先讲讲类
类(class)
类(class) 类的定义
类是TypeScript的核心,使用TS开发时,大部分代码都是写在类里面的,这里我们会简单的介绍一下类的定义,构造函数,以及类的继承等等
下面我来看一下简单的一个类的定义
| 1 2 3 4 5 6 7 8 9 10 11
 | class Person {     name: string;     todo() {         console.info("to do somethin")     } } var p1 = new Person() p1.name = "tang quan kun" p1.todo()
 | 
首先我们通过class实例定义一个类,然后在通过关键字new实例化一个对象,实例化就可以调用里面方法,如果大家学过c++或者java的都知道,ts中的类也有访问控制符分别是public(所有类都可以访问)、private(只有本类可以访问)、protected(当前类和子类可以访问,后面继承会讲到),想必学过java的人都知道这几个,定义类的时候,默认就是public,跟上面的代码一样,下面来看看private
| 1 2 3 4 5 6 7 8 9 10 11 12 13
 | class Person {     private name: string;     protected age: number;        todo() {         console.info("to do somethin")     } } var p1 = new Person() p1.name = "tang quan kun"  p1.age = 24  p1.todo()  
 | 
构造函数
  构造函数是类里面的一个特殊的方法,只有在类被实例化的时候会被调用,并且只调用一次,他就是constructor
| 1 2 3 4 5 6 7 8 9 10 11 12 13
 |    class Person {     private name: string;         constructor(name: string) {         this.name = name       };        todo() {         console.info(this.name)     } } var p1 = new Person("tang quan kun") p1.todo() 
 | 
这个类在被实例化的时候必要要传一个name进去,在实例化的时候就调用了constructor函数,所以后面打印出来就是 tang quan kun,在构造函数中的参数是必须要申明属性访问控制控制符的,上面的name的访问控制符为private
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
 | class Person {         constructor(name: string) {           this.name = name       };        todo() {         console.info(this.name)     } } var p1 = new Person("tang quan kun") p1.todo() class Person {         constructor(private name: string) {           this.name = name       };        todo() {         console.info(this.name)     } } var p1 = new Person("tang quan kun") p1.todo()
 | 
类的继承
类的继承这儿设计到两个关键字那就是extends 和 super  extends 主要用来声明类的继承关系,super用来调用父类的构造方法或者函数
1、下面我们来看一下extends,extends用来声明一种继承关系,所谓继承关系就是是的关系,下面我们来看看一个例子
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14
 | class Person {     constructor(private name: string) {         this.name = name       };        todo() {         console.info(this.name)     } } class Man extends Person{ } var p1 = new Man("tang quan kun") p1.todo() 
 | 
通过上面的列子可以看出,Man类通过extends继承了类Person,Man就继承了Person中所有的方法和属性。在继承的类Man中我们可以也可以增加新的方法和属性

从上面的例子可以看出Man可以自己进行扩展属性和方法
2、super的用法,super有两种用法,第一种是拿来调父类的构造函数,先看一个demo,
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
 | class Person {     constructor(protected name: string) {         this.name = name           console.info("i an is class Person")     };        todo() {         console.info(this.name)     } } class Man extends Person{     constructor(name: string, age: number) {         super(name)           this.age = age         console.info("i an is class Man")     }     age: number;     work() {     } } var p1 = new Man("tang quan kun", 24)
 | 
打印出来的结果

在构造Man这个类的时候会通过super调用Person类的构造方法,这是super的一个用法,另外一个用法就是用个super调用父类的方法
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 | class Person {     constructor(protected name: string) {         this.name = name           console.info("i an is class Person")     };        todo() {         console.info("在Person中执行的")     } } class Man extends Person{     constructor(name: string, age: number) {         super(name)           this.age = age         console.info("i an is class Man")     }     age: number;     work() {         super.todo()           this.todoafter()     }     private todoafter() {         console.info("在Man执行的")     } } var p1 = new Man("tang quan kun", 24) p1.work()
 | 
打印出来的结果

我们可以从上面的结果中可以看出,super的两种方法,一种是调用父类的构造方法,一种是调用父类的方法或者属性