重拾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