0
点赞
收藏
分享

微信扫一扫

TypeScript:类的静态属性

山竹山竹px 2022-04-18 阅读 85
typescript

如果类的某些属性属于全体类对象共有的,那么可以把这些属性通过static声明为静态属性。以避免每个对象都生成一份同样的数据成员,浪费内存。

类的静态属性属于类,因此是通过类名来访问:

class UChar{                    //创建一个无符号字符类型的数值
	static MAX : number = 255;  //最大值为255,由于是全体无符号字符类型的通用属性,所以定义为静态属性
	static MIN : number = 0;    //最小值为0,由于是全体无符号字符类型的通用属性,所以定义为静态属性
	private data : number;
	constructor(data : number)
	{                            //构造对象时,检查初始值是否溢出
		if(data > UChar.MAX){    //通过UChar.MAX访问静态成员
			data = UChar.MAX
		}
		if(data < UChar.MIN){    //通过UChar.MIN访问静态成员
			data = UChar.MIN;
		}
		this.data = data;
	}
	print():void{
		console.log("data=", this.data);
	}
}

let u1 = new UChar(1000);        //初始值溢出
u1.print();                      //输出:data= 255
let u2 = new UChar(-1);          //初始值溢出
u2.print();                      //输出:data= 0
let u3 = new UChar(88);          //初始值未溢出
u3.print()                       //输出:data= 88

值得注意的是类的静态属性共用于全体对象,如果运行时对其进行了更改,会影响所有对象:

class UChar{
	static MAX : number = 255;
	static MIN : number = 0;
	private data : number;
	constructor(data : number)
	{
		if(data > UChar.MAX){
			data = UChar.MAX
		}
		if(data < UChar.MIN){
			data = UChar.MIN;
		}
		this.data = data;
	}
	print():void{
		console.log("data=", this.data);
	}
}

let u1 = new UChar(1000);    //初始值溢出
u1.print();                  //输出:data= 255
UChar.MAX = 10000;           //改变了静态属性
let u2 = new UChar(1000);    //更改值不再溢出
u2.print();                  //输出:data= 1000

可见有时在运行时更改静态属性并不是一个好的方式,因此建议将静态属性声明为readonlyprivate,禁止随意的在类的外部对静态属性进行更改。

举报

相关推荐

0 条评论