typescriptでの属性のカプセル化は、主に安全のためです

たとえば、属性をカプセル化することが安全のためである理由

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

const sx = new SX('哈哈',12);
sx.name = '刘' 

name属性は外部から任意に変更できるため、セキュリティが低下します

属性を導入する

private 私有属性,只能在类内部进行访问修改,通过在类中添加方法使得私有属性可以被外部访问,之前我们不写,默认就是public

それから私達は書く

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

  //定义方法,获取属性
  getName(){
    
    
    return this._name;
  }
  //定义方法,设置name属性
  setName(value:string){
    
    
    this._name = value
  }
}

const sx = new SX('哈哈',12);
sx.setName('猪八戒')

これで、変更方法が手元にあります。変更方法を設定しないと、このプロパティは変更されません。

上記の方法は自分で実装しますが、TSはより便利な方法を提供します

class SX {
    
    
  private _name: string;
  private _age: number;
  constructor(name: string, age: number) {
    
    
    this._name = name;
    this._age = age;
  }
  
  //获取属性方法,get
  get name(){
    
    
    return this._name;
  }
  //设置属性方法,set
  set name(value:string){
    
    
    this._name = value;
  }
}
const sx = new SX('哈哈',12);

sx.name; //获取
sx.name = '猪八戒'

パブリック属性とプライベート属性に加えて、tsには保護された属性もあります

protected 受保护的属性,只能在当前类和当前类的子类里面调用

それを使用する方法?

class protect{
    
    
  protected name : string;
  constructor(name : string){
    
    
    this.name = name;
  }
}
class protectchildren extends protect{
    
    
  getter(){
    
    
    console.log(this.name) //可以取到
  }
}

const aaa = new protectchildren('sss');
// aaa.name 取不到

最後に、クラスを書く簡単な方法を紹介します

以前はこのように書かれていました

class bbbb{
    
    
  public name : string;
  constructor(name : string){
    
    
    this.name = name;
  }
}

このように書くだけで、効果は同じです

class bbbb{
    
    
  constructor(public name:string){
    
    }
}

最後に、もう一度言いますが、カプセル化とは、属性をより安全にし、getとsetを使用して変更することです。

おすすめ

転載: blog.csdn.net/weixin_45389051/article/details/115285273