重拾Typescript之静态属性和抽象类
1.TypeScript
中的静态属性:
如果对于类的访问器有疑问的童鞋,还请先移步至https://juejin.cn/post/7073092815474917413
class Person{
constructor(private name:string){
}
}
const person = new Person('kobe');
看到上面的思考一个问题,如果让私有属性
对外暴露呢?
1.1-getter:
那就是现在用提到的getter
和setter
//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