(JavaScript)Property/getter&setter


Property
propertyは、ある値を表し、その値が別の値に関連付けられている場合にpropertyと呼ばれます.
たとえば、文字列にはlengthという属性があり、このpropertyには文字列内の文字の数を表す整数があります.
MDNで定義された属性
propertyは、通常、データ構造に関連付けられたプロパティを表します.propertyには2つのタイプがあります.
  • データプロパティ(データ属性):値を格納するためのプロパティ.通常使用されるプログラムはデータプログラムです.
  • ビジターProperty(accsor property):値がありません.値ではなく、読み書き中に呼び出される関数のプロシージャを指定できます.アクセス者構成の本質は、値の取得と設定を担当する関数です.しかし、外部コードでは、関数ではなく普通のプログラムのように見えます.
  • 訪問者の割合
    アクセスとは、オブジェクト向けのプログラミングにおいて、オブジェクトの外でオブジェクトが持つproperty値を読み取りまたは書き込む方法を提供することである.オブジェクトの外部でオブジェクトを直接操作するpropertyは、データのメンテナンス性を損なう主な原因です.
    getterとsetter
    アクセス者プロパティはgetter(取得者)メソッドとsetter(設定者)メソッドで表されます.
    オブジェクトテキストでは、getterメソッドとsetterメソッドをgetメソッドとsetメソッドとして表すことができます.
    let obj = {
      get propName() {
        // getter, obj.propName을 실행할 때 실행되는 코드 
      }, 
      set propName(value) {
        // setter, obj.propName = value를 실행할 때 실행되는 코드
      }
    };
  • getterメソッドは、obj.propNameを使用してpropertyを読み取りようとしたときに実行される.
  • setterメソッドがobj.propName = value単位で値付けされたときに実行されます.
  • getterメソッド
    let user = {
      name : "john", 
      surname: "smith",
      
      get fullName() {
        return `${this.name} ${this.surname}`'
      }
    };
    alert(user.fullName); // John Smith
    外部コードでは、通常のプログラムのようにアクセス者プログラムを使用できます.
    訪問者Propertyはこのような考えから出発した.ビジター・プロパティの使用
    関数のように呼び出されるのではなく、通常のプログラムで値にアクセスするように一般的にuserを使用します.fullNameを使用してproperty値を取得できます.
    setterメソッド
    let user = {
      name: "John",
      surname: "Smith",
    
      get fullName() {
        return `${this.name} ${this.surname}`;
      }
      
      set fullName(value) {
        [this.name, this.surname] = value.split(" ");
      }
    };
    
    // 주어진 값을 사용해 set fullName이 실행됩니다.
    user.fullName = "Alice Special"
    
    alert(user.fullName); // Alice Special
    alert(user.name); // Alice
    alert(user.surname); // Special
    これにより、getterメソッドとsetterメソッドが実装され、オブジェクトにはfullNameという「仮想」プロパティがあります.仮想的な番組を読み書きできるが、実際には存在しない.
    アクセス者プロパティ記述子
    アクセス者プロファイルには、記述子valueおよびwritableを含まずにgetおよびsetという関数が含まれます.
    したがって、アクセス者propertyには次の記述子があります.
  • get():パラメータを持たない関数でpropertyを読み込むときに役立ちます.
  • set():propertyに値を書き込むときに呼び出される引数が1の関数です.
  • は、データ・プロパティと同じものを列挙することができる.
  • 構成:データプロパティと同じです.
  • 記述子getとsetをdefinePropertyに渡すことで、fullNameに次のようにアクセス者を作成できます.
    let user = {
      name: "John",
      surname: "Smith"
    };
    
    Object.defineProperty(user, 'fullName', {
      get() {
        return `${this.name} ${this.surname}`;
      },
    
      set(value) {
        [this.name, this.surname] = value.split(" ");
      }
    });
    
    alert(user.fullName); // John Smith
    
    for(let key in user) alert(key); // name, surname
    詳細:getterとsetterの使用
    通常、名前を読み取り、変更するオブジェクトには、次のように名前を変更する方法setName()が含まれます.
    let user = {
      name: '',
      setName(value) {
        if (value.length < 4) {
          alert("입력하신 값이 너무 짧습니다. 네 글자 이상으로 구성된 이름을 입력하세요.");
          return;
        }
        this.name = value;
      }
    };
    user.setName("Pete");
    alert(user.name); // Pete
    user.setName(""); // 너무 짧은 이름을 할당하려 함
    ただし、getterとsetterを「実際の」property値のパッケージとして使用すると、新しいメソッドを作成することなくproperty値を制御できます.
    let user = {
      get name() {
        return this._name;
      },
      set name(value) {
        if (value.length < 4) {
          alert("입력하신 값이 너무 짧습니다.");
          return;
        }
        this._name = value;
      }
    };
    user.name = "pete";
    alert(user.name); // pete
    
    user.name = ""; 
    userの名前はnameに格納され、getter(user.name)とsetter(user.name=value)でpropertyにアクセスします.
    ソース
    プロパティgetterとsetter