12. TypeScript 类的 Getter、Setter 和 static 使用
有小伙伴问了,学了类的访问类型private
,那这个东西如何使用?其实它的最大用处是封装一个属性,然后通过 Getter
和 Setter
的形式来访问和修改这个属性。
类的 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 岁,是不是通过这个小例子,一下子就明白了private
和getter
的用处。 _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 }
这是想通过这个例子让小伙伴们清楚的明白getter
和setter
的使用,很多小伙伴刚学这部分,都不太清楚为什么要使用getter
和setter
,你也能更清楚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
的使用意义,学了getter
和setter
属性,还学习了静态修饰符static
,这样就不用 new 出对象就可以使用类里的方法了。
码云笔记 » 12. TypeScript 类的 Getter、Setter 和 static 使用