class PerSon{
name:string;
age:number;
constructor(name:string,age:number){
this.name=name;
this.age=age;
}
}
const per =new PerSon("张三",18);
per.name="李四";
per.age=-10;
如上代码:现在属性是在对象中设置的,属性可以任意修改,那么此时就会有一些安全隐患问题,如一个人的年龄被修改为负数,这显然是不合理的。
为了解决该问题 我们使用到了private修饰符:
public 修饰的属性可以在任意位置访问(修改) 为默认值
private 私有属性 只能在类内部修改(其子类也不能读取修改) 通过在类中添加方法使得私有属性可以被外部访问到
protected 受保护的属性只能在当前类及当前类的子类中读取(修改)
class PerSon{
private name:string;
private age:number;
constructor(name:string,age:number){
this.name=name;
this.age=age;
}
// getter 方法用来读取 setter方法又来属性设置 她们被称为属性存取器
getName(){
return this.name;
}
setName(val:string){
this.name=val;
}
getAge(){
return this.age;
}
setAge(val:number){
val>=0?this.age=val:null;
}
}
const per =new PerSon("张三",18);
// per.name="李四"; //报错
per.setName("李四")
per.setAge(-10)
console.log(per)//PerSon {name: '李四',age:18}
这样就可以把我们类中的属性的控制权掌握在自己手里,只不过还是太麻烦了。每次都要读取调用不同的方法;
TS的类方法中为我们提供了getter、setter方法供我们方便使用
class PerSon{
private _name:string;
private _age:number;
constructor(name:string,age:number){
this._name=name;
this._age=age;
}
// TS中设置getter setter方法
get name(){
return this._name;
}
set name(val:string){
this._name=val
}
get age(){
return this.age;
}
set age(val:number){
val>=0?this._age=val:null;
}
}
const per =new PerSon("张三",18);
console.log(per.name)//张三
per.name="李四"
console.log(per.name)//李四
这样就可以使用原来的存取方式获取、更新属性,并且解决了安全隐患