欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(三)Typescript中的类

程序员文章站 2022-07-03 20:54:12
...

加入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()
  }
}

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