TypeScript——类

ES6之后JS将能够使用基于类的面向对象的方式,TS中的类覆盖了JS中的类

  • 基本实现

“类的成员属性”都是实例属性,而不是原型属性,“类的成员方法”都是“原型”方法

class Dog {
    constructor(name: string) {
        this.name = name;
    }
    name: string // 需要增加成员类型注释
    run() {}
}
console.log(Dog.prototype) // { run: f, constructor: f }


继承
与ES不同的是:实例的属性必须有初始值,或者在构造函数中被初始化

派生类从基类中继承属性和方法,用作于类的拓展

 

class Husky extends Dog {
    constructor(name: string, color: string) {
        super(name) // 派生类的构造函数必须包含 "super" 调用
        this.color = color; // 访问派生类的构造函数中的 "this" 前,必须调用 "super"
    }
    color: string
}
  • 修饰符

修饰符含义作用
public 公共成员(默认) 对所有类可见
private 私有成员

只能在类本身调用 而不能在实例/子类中调用;

构造函数使用则该类不可实例化和继承;

protected 被保护成员

可在类本身及子类调用,而不能在实例中调用;

构造函数使用则该类不可实例化,只能被继承;

readonly 只读成员 一定需要初始化,不可修改
static 静态成员 只能通过类名调用(实例化对象no),可被继承
  • 抽象类:只能被继承,而不能被实例化(对ES的拓展)

  

// 抽象类:抽离出一些类的共性,有利于代码的复用和拓展 可实现多态
abstract class Animal {
    eat() {
        console.log('eat')
    }
    abstract sleep(): void // 在抽象类中可以定义抽象函数
}
// let animal = new Animal() 无法创建抽象类的实例


//
class Bird extends Animal {
    sleep() {        // 在子类中做不同的操作,从而实现多态
        console.log('Bird sleep')
    }
}

 

 

 

posted @ 2020-02-29 19:46  JessieXie  阅读(147)  评论(0编辑  收藏  举报