Type Script属性封装(public、private、protected)

public

  • TS可以在属性前添加属性的修饰符
  • public修饰的属性可以在任意位置访问(修改) 默认值
(function () {
  //定义一个表示人物的类
  class Person {
    name: string; //可以加也可以不加
    public age: number;

    constructor(name: string, age: number) {
      this.name = name;
      this.age = age;
    }
  }

  const per = new Person("yrq", 18);

  //现在属性是在对象中设置的,属性可以任意的被修改
  //属性可以任意被修改将会导致对象中的数据变得非常不安全
  per.name = "lyq";
  per.age = -38;
  console.log(per);
})();

private

  • private 私有属性,私有属性只能在类内部进行访问(修改)
  • 通过在类中添加方法使得私有属性可以被外部访问
js使用getter和setter的方法:
(function () {
  //定义一个表示人物的类
  class Person {
    private name: string;
    private age: number;

    constructor(name: string, age: number) {
      this.name = name;
      this.age = age;
    }

    /*
      getter方法用来读取属性
      setter方法用来设置属性
      它们被称为属性的存取器
    */

    //定义方法,用来获取name属性
    getName() {
      return this.name;
    }
    //定义方法,用来设置name属性
    setName(value: string) {
      this.name = value;
    }
    getAge() {
      return this.age;
    }
    setAge(value: number) {
      //用方法的好处就是让属性的控制权掌握在自己手里,可以降低代码出错几率
      if (value >= 0) this.age = value;
    }
  }

  const per = new Person("yrq", 18);
  //这时候就不可以直接修改了,可以用一个函数来修改
  //修改和获取都是通过方法来调用,主动权在自己
  per.setName("lyq");
  per.setAge(33);
  console.log(per.getName(), per.getAge());
})();
TS中get和set语法糖:
(function () {
  //定义一个表示人物的类
  class Person {
    private _name: string;
    private _age: number;

    constructor(name: string, age: number) {
      this._name = name;
      this._age = age;
    }

    //TS中设置getter方法的方式
    get name() {
      return this._name;
    }
    //TS中设置setter方法的方式
    set name(value: string) {
      this._name = value;
    }
    get age() {
      return this._age;
    }
    set age(value: number) {
      if (value >= 0) this._age = value;
    }
  }

  const per = new Person("yrq", 18);

  per.name = "lyq";
  per.age = 33;

  console.log(per);
})();

protected

  • protected 受包含的属性,只能在当前类和当前类的子类中访问(修改)
(function () {
  class A {
    protected num: number;

    constructor(num: number) {
      this.num = num;
    }
  }

  class B extends A {
    test() {
      console.log(this.num);
    }
  }
  const b = new B(123);
  // b.num = 33; //报错 不能在外部访问
})();
简写方法:
(function () {
  class C {
    //可以直接将属性定义在构造函数中
    constructor(public name: string, public age: number) {}
}
  const c = new C("yrq", 11)
  console.log(c);
  
})();
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值