12. TypeScript 类的 Getter、Setter 和 static 使用

有小伙伴问了,学了类的访问类型private,那这个东西如何使用?其实它的最大用处是封装一个属性,然后通过 GetterSetter 的形式来访问和修改这个属性。

类的 Getter 和 Setter

我们新建一个文件Demo12.ts,然后声明一个XiaoJieJie(小姐姐)类,都知道小姐姐的年龄是不能随便告诉人,所以使用了private,这样别人就都不知道她的真实年龄,而只有她自己知道。

代码如下:

class Xiaojiejie {
  constructor(private _age:number){}
}

如果别人想知道,就必须通过getter属性获取,注意我这里用的是属性,对它就是一个属性。getter属性的关键字是get,后边跟着类似方法的东西,但是你要注意,它并不是方法,归根到底还是属性。

class Xiaojiejie {
  constructor(private _age:number){}
  get age(){
      return this._age
  }
}

const xiaofnag = new Xiaojiejie(28)

console.log(xiaofang.getAge)

这时候你会觉的这么写不是多此一举吗?玄妙就在于getter里,我们可以对_age进行处理,比如别人问的时候我们就偷摸的减少 10 岁。代码可以写成这样。

class Xiaojiejie {
  constructor(private _age:number){}
  get age(){
      return this._age-10
  }
}

这时候小芳的年龄就变成了迷人的 18 岁,是不是通过这个小例子,一下子就明白了privategetter的用处。 _age是私有的,那类的外部就没办法改变,所以这时候可以用setter属性进行改变,代码如下:

class Xiaojiejie {
  constructor(private _age:number){}
  get age(){
      return this._age-10
  }
  set age(age:number){
    this._age=age
  }
}

const xiaofang = new Xiaojiejie(28)
xiaofang.age=25
console.log(xiaofang.age)

其实setter也是可以保护私有变量的,现在小芳的年龄输出是 15 岁,这肯定不行,不符合法律哦,这样是我们在setter里给他加上个 3 岁,就可以了。

set age(age:number){
  this._age=age+3
}

这是想通过这个例子让小伙伴们清楚的明白gettersetter的使用,很多小伙伴刚学这部分,都不太清楚为什么要使用gettersetter,你也能更清楚private访问类型的意义。

类中的 static

学习类,都知道要想使用这个类的实例,就要先New出来(),但有时候人们就是喜欢走捷径,在他们有对象的情况下,也想享受青春的躁动,有没有方法?肯定是有方法的。

比如我们先写一下最常规的写法:

class Girl {
  sayLove() {
    return "I Love you";
  }
}

const girl = new Girl();
console.log(girl.sayLove());

但是现在你不想new出对象,而直接使用这个方法,那 TypeScript 为你提供了快捷的方式,用static声明的属性和方法,不需要进行声明对象,就可以直接使用,代码如下。

class Girl {
  static sayLove() {
    return "I Love you";
  }
}
console.log(Girl.sayLove());

好了,这节我们就学到了这里,复习一下,我们学了private的使用意义,学了gettersetter属性,还学习了静态修饰符static,这样就不用 new 出对象就可以使用类里的方法了。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有资源及文章均来源于网络及用户分享或为本站原创,仅限用于学习和研究,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 12. TypeScript 类的 Getter、Setter 和 static 使用

发表评论

IT互联网行业相关广告投放 更专业 更精准

立即查看 联系我们