如果类的某些属性属于全体类对象共有的,那么可以把这些属性通过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
可见有时在运行时更改静态属性并不是一个好的方式,因此建议将静态属性声明为readonly或private,禁止随意的在类的外部对静态属性进行更改。