(三)Typescript中的类

加入QQ群:864680898,一起学习进步!点击群名可查看本人网站,有最新文章!

(三)Typescript中的类

在ECMAScript 6中,JavaScript程序将可以使用这种基于类的面向对象方法。在ts中的话,就更接近与那些成熟的语言 Java, Php

extends 类的继承关键词

class Father {
  surname: string = 'deng';
  shape: string = 'cool';
}
class Son extends Father{

}
let son = new Son();
console.log(son.shape)    // cool

public 公有属性和方法

默认的就是公有的属性和方法,这些属性和方法可以被子类继承使用

class Father {
  surname: string = 'deng';
}
class Son extends Father {
  constructor(){
    super();
    console.log(this.surname)
  }
}
let son = new Son();

private 私有属性和方法

private的属性和方法在声明的类的外部不能访问

class Father {
  surname: string = 'deng';
  private age: number = 23;
}
class Son extends Father {
  constructor(){
    super();
    console.log(this.age) // Error
  }
}
let son = new Son();

protected 受保护的属性和方法

protected修饰符与private修饰符的行为很相似,但有一点不同,protected成员在派生类中仍然可以访问

class Father {
  surname: string = 'deng';
  private age: number = 23;
  protected name: string = 'mySkey';
}
class Son extends Father {
  constructor() {
    super();
    console.log(this.name)  // Ok
  }
  getFatherName(){
    return this.name        // Ok
  }
}
let father = new Father();
let son = new Son();
console.log(son.getFatherName())  // Ok
//console.log(father.name)     // Error
//console.log(son.name)        // Error

static 静态属性

静态的属性,直接用类来访问

class Father {
  static myName: string = 'mySkey';
  static getAge(): number{
    return 23;
  }
}
console.log(Father.myName)
console.log(Father.getAge())

readonly 只读

申明的只读的属性不能再更改

class Person {
  readonly name: string = 'mySkey';
}
let mySkey = new Person();
console.log(mySkey.name);   // Ok
mySkey.name = '1111';       // Error

get 与 set 来截取对对象成员的访问

TypeScript支持getters/setters来截取对对象成员的访问。 它能帮助你有效的控制对对象成员的访问

// 就像女人的年龄是个秘密,只会对不喜欢的人告诉真实的
let isLike: boolean = false;
class Woman{
  private _age: number = 16;

  get age(): number{
    return this._age;
  }

  set age(num: number){
    if(!isLike){
      this._age = num;
    }else{
      console.log('告诉你的也是假的!!')
    }
  }
}
let woman = new Woman();
woman.age = 23;
console.log(woman.age)

// 看吧,不喜欢你,所以你知道了她的真实年龄,如果把isLike改为true,那么她每天就是16了

abstract 抽象类

abstract关键字是用于定义抽象类和在抽象类内部定义抽象方法,抽象类是供其它类继承的基类。 他们一般不会直接被实例化。

abstract class Person {
  abstract type: string = 'animal';
  sing(){
    console.log('我会唱歌!')
  }
}
// let person = new Person() // Error 无法创建抽象类的实例
class Myskey extends Person {
  type: string = 'animal';    // 无法继承,而且必须重写
  constructor(){
    super()
    this.sing()
  }
}

还有构造函数;还可以把类当接口使用

猜你喜欢

转载自blog.csdn.net/qq_42036203/article/details/88230607