类,静态属性
1、定义:类就是拥有相同属性和方法的一系列对象集合。
2、展开理解:类是一个模具,是该类包含的所有具体对象中抽象出来的一个概念,类定义了它所包含的静态特征和动态特征。
ts中的类编译成es5之后,它的本质是一个构造函数。
静态的属性和成员都是属于于类(构造函数)所指向的对象空间,挂载到类上。
class People {
name: string;
age: number;
addr: string;
// 当加上static关键字后,count就归属于类(构造函数)空间中的变量。已经不属于this指向的对象。
static count: number = 0;
constructor(_name: string, _age: number, _addr: string) {
this.name = _name;
this.age = _age;
this.addr = _addr;
People.count++;
}
doEat(){}
doStep(){}
}
let p1 = new People("wangwu", 23, "上海市");
let p2 = new People("wangwu2", 25, "上海市");
console.log(People.count); // 2
p1.doEat();
何时用静态属性
export default class DateUtil {
static formatDate() {}
static diffDateByDay() {}
static diffDateByHour() {}
static timeConversion() {}
}
// 工具类只需要一个对象就可以。
// let dateUtil = new DateUtil();
// 当需要使用方法时,可以把需要的函数定义成静态属性。
DateUtil.formatDate();
TS 单件(例)模式的两种实现
定义:单件模式是指一个类只允许外部获取到它唯一的实例对象。
外部调用时实例只创建一次
比静态调用更简洁
class DateUtil {
static dateUtil: new DateUtil(); // 立即创建单件模式
private constructor() {
console.log("创建对象");
}
formatDate() {
console.log("fomatDate");
}
diffDateByDay() {}
diffDateByHour() {}
timeConversion(restTime: number) {}
}
const dateUtil1 = DateUtil.dateUtil;
const dateUtil2 = DateUtil.dateUtil;
console.log(dateUtil1 === dateUtil2); // true
dateUtil1.formatDate();
export default DateUtil.dateUtil;
上方代码第一次执行时不管外部是否调用,都会创建实例
下方代码第一次执行时外部调用时,才会创建实例
class DateUtil {
static dateUtil:DateUtil
static getInstance() {
if(!this.dateUtil) {
this.dateUtil = new DateUtil;
}
return this.dateUtil;
}
private constructor() {
console.log("创建对象");
}
formatDate() {
console.log("fomatDate");
}
diffDateByDay() {}
diffDateByHour() {}
timeConversion(restTime: number) {}
}
const dateUtil1 = DateUtil.getInstance();
const dateUtil2 = DateUtil.getInstance();
console.log(dateUtil1 === dateUtil2); // true