TypeScript-9 属性的封装

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)//李四

这样就可以使用原来的存取方式获取、更新属性,并且解决了安全隐患

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阁下何不同风起?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值