运TS 类,首先会为静态成员开辟内存空间,静态成员的内存空间分配的时间要早于对象空间的分配。
并且无论是否调用这个类,是否创建对象,TS都会为这个类的静态方法、静态属性分配内存空间
只要前服务器不重启或控制台程序还没有结束,都一直存在这个内存空间。后续无论调用多少次,都是调用的同一空间
内存空间有三个区:静态区、栈、堆
普通类
class Student {
public sname?: string; //对象属性
public static only?: number; //类的静态属性
public static className() {
//this. //可以看见,能点出一堆类属性和方法,没有talk方法和sname属性
}
//注意,js中可以直接new这个函数,当做构造函数。但TS是不允许的,更面向对象
public talk() {
//this. //只能点出实例对象属性和方法,没有className方法和only属性
console.log("1-talk");
}
}
const a = new Student();
a.talk(); //1-talk
//TS 类可以访问 prototype 原型对象属性,修改或覆盖都可。
//但无法在 prototype 原型对象属性增加新的方法或属性
Student.prototype.talk = () => {
console.log("2-talk");
};
a.talk(); //2-talk
//Student.prototype.page = 2 //不能新增属性或方法
懒汉式单件设计模式
【延迟使用】等到需要使用对象时才创建对象,按需创建
懒汉式单件设计模式
第一步:把构造器设置为私有的,不允许外部new
第二步:至少应该提供一个外部访问的静态方法,外部可以这得到一个对象。
第三步:外部调用第二步提供的静态方法来获取一个对象
class Moon {
static cname: string = "月亮";
static cself: Moon;
constructor() {
console.log("月亮构造器");
}
public static setMoon() {
if (!this.cself) {
console.log("此静态属性,目前是undefined");
this.cself = new Moon();
console.log("静态属性已指向一个对象空间");
}
return this.cself;
}
public talk() {
console.log("hello,我是月亮");
}
}
const b = Moon.setMoon();
b.talk();
饿汉式单件设计模式
饿汉式单件设计模式: 是无论你是否用到了实例对象,一开始就建立这个唯一的对象
第1+3步和上面一样
第2步: 建立一个静态引用属性,同时把这个静态引用属性指向实例对象【new 自己()】
class Sun {
static cname: string = "太阳";
static cself: Sun = new Sun();
constructor() {
console.log("太阳构造器");
this.talk();
}
public talk() {
console.log("hello,我是太阳");
}
}
这个ts文件并没有调用sun类或方法,但运行这个文件,可以看出它执行了。
是上面静态属性的功能实现的。
网友评论