likes
comments
collection
share

重拾Typescript之静态属性和抽象类

作者站长头像
站长
· 阅读数 32

1.TypeScript中的静态属性:

如果对于类的访问器有疑问的童鞋,还请先移步至https://juejin.cn/post/7073092815474917413

class Person{
  constructor(private name:string){

  }
}

const person = new Person('kobe');

看到上面的思考一个问题,如果让私有属性对外暴露呢?

1.1-getter:

那就是现在用提到的gettersetter

//getter
class Person1 {
  constructor(private _name:string){
  }
  get name(){
    return this._name + "in Boston"
  }
}
const allen = new Person1('Ray Allen');
console.log(allen.name);//注意此处无括号  打印出Ray Allen in Boston能够正常访问
  • 这种函数前加get关键字就可以完成对私有private属性的获取

  • 通常内部私有属性会用一个_+"属性名"来定义

  • get中可以对属性进行加密保护处理,这里这时候简单的拼接了一个in Boston字符串

1.2-setter:

上面提到了获取私有属性,那么如果给私有属性赋值呢🤔?

//setter

class Person2 {
  constructor(private _name:string){
  }
  get name(){
    return this._name + " in Boston"
  }
  set name(name:string){
    const realName = name.split(' ')[0];
    this._name = realName;
  }
}
const allen1 = new Person2('Ray Allen');
allen1.name = 'Ray Allen';
console.log(allen1.name); //Ray in Boston
  • 这种函数前加set关键字就可以完成对私有private属性的赋值
  • set中也可以对值进行加密

1.3-单例模式:

单例模式可以简单的理解为只生成一个实例

如果想要只生成一个实例,那么肯定不能使用new的形式,所以需要将constructor设置为private

既然不能通过new的形式,那么就需要考虑如何给Single上挂方法以及属性了---也就是static静态属性

  • 使用static的属性会挂在类上而不是类的实例上

  • 声明一个私有的instance用来存放Single生成的实例

  • 写一个static方法getInstance,内部通过判断返回实例,而因为static是针对于类的,所以外面可以通过Single.getInstance()来获取实例

// 单例模式ts的实现--只能生成一个实例
class Single{
  private static instance:Single; 
  private constructor(){}

  static getInstance(){
    if(!this.instance){
      this.instance = new Single();
    }
    return this.instance;
  }
}
// const single1 = new Single();
// const single2 = new Single();

const single3 = Single.getInstance();
const single4 = Single.getInstance();

console.log(single3 === single4); //true

2.抽象类:

笔者第一次接触这个词,好像是工厂模式里面有个抽象工厂模式

  • 抽象类只能被继承,不能被实例化

  • 抽象类是把类相关的通用的东西抽象出来

  • 接口interface是把各种对象通用的东西抽象出来

abstract class Gemo{
  getType(){
    return '我是抽象类'
  }
  abstract getArea():number;
}

class Circle extends Gemo{
  getArea(): number {
      return 24
  }
}
转载自:https://juejin.cn/post/7074080912127819806
评论
请登录