【JavaScriptハイレベルまとめ】対象に向けたプログラム設計-理解対象

3108 ワード

オブジェクトの属性タイプ
-----データのプロパティ
データ属性はデータ値の位置を含み、この位置で読み取りと書き込みができます.データ属性は4つの特性があります.
  • [[Configrable]]:deleteで属性を削除し、属性を再定義できるかどうかを示す.属性の特性を変更できますか?またはアクセス属性に変更できますか?私たちが直接オブジェクトに属性を定義すると、このデータ属性がデフォルトの[Configrable]はtrue
  • です.
  • [[Enumerable]:for-iを通じて循環できますか?
  • [[Writable]]:属性を変更できるかどうかを示す値.
  • [[Value]]:この属性を含むデータ値は、属性の値をこの位置から読み出し、属性の値を書き込むのもこの位置に保存します.
  • クラスは次のように対象の属性nameを定義します.[[Configrable]]、[[Enumerable]]]、[[Writable]は全部trueです.[[Value]]は定義の値です.[[小明]はこれに対して修正値がすべてこの位置に反映されます.
    var person = {
      name: "  "
    };
    
    Object.defineProperty()属性のデフォルト特性を変更できます.
    3つのパラメータを受け入れる:
  • 属性があるオブジェクト
  • 属性名
  • は、オブジェクトを説明する.このオブジェクトの属性キーワードはConfigrable,Enumerable,Writable,Valueのうちの一つでなければなりません.
    var person = {};
    Object.defineProperty(person, "name", {
        writable: false,
        value: "Nicholas"
    });
    alert(person.name); //"Nicholas" 
    person.name = "Greg"; //   writable:   false              
    alert(person.name); //"Nicholas"
    
    注意:Object.definePropertyを使用するとConfigrableはfalseに設定されます.これはtrueに設定できません.Object.definePropertyを再起動します.writable以外の特性を修正するとエラーが発生します.
    -----アクセス属性
    アクセス属性にはデータ値が含まれていませんが、一対のgetterとsetter関数が含まれています.アクセス器のプロパティは以下の4つの特性があります.
  • [[Configrable]]:deleteで属性を削除し、属性を再定義できるかどうかを示す.属性の特性を変更できますか?またはアクセス属性に変更できますか?私たちが直接オブジェクトに属性を定義すると、このデータ属性がデフォルトの[Configrable]はtrue
  • です.
  • [[Enumerable]:for-iを通じて循環できますか?
  • [[Get]:属性の読み込み時に呼び出し、デフォルト値はundefinedとなります.
  • [[Set]:属性を書き込む時に呼び出し、デフォルト値はundefinedとなります.
  • Object.defineProperty()により属性のデフォルト特性を変更することができます.
    var book = {
      _year: 2004,
      edition: 1 
    };
    Object.defineProperty(book, "year", {
      get: function(){
        return this._year;
      },
      set: function(newValue){
        if (newValue > 2004) {
            this._year = newValue;
            this.edition += newValue - 2004;
        } 
      }
    });
    book.year = 2005; 
    alert(book.edition); //2
    
    Object.defineProperties()複数の属性を定義する特性
    var book = {};
    Object.defineProperties(book, {
        _year: {
            value: 2004
        },
        edition: {
            value: 1
        },
        year: {
            get: function(){
                 //  ...
            },
            set: function(newValue){
                //   ...
            }
        }
    })
    
    Object.getOwn PropertyDescriptor()属性の特性を読み取る
    var book = {};
    Object.defineProperties(book, {
      _year: {
        value: 2004
      },
      edition: {
        value: 1
      },
      year: {
        get: function(){
            return this._year;
        },
        set: function(newValue){
            if (newValue > 2004) {
                this._year = newValue;
                this.edition += newValue - 2004;
            } 
        }
      }
    });
    
    var descriptor = Object.getOwnPropertyDescriptor(book, "_year");
    alert(descriptor.value); //2004
    alert(descriptor.configurable); //false
    alert(typeof descriptor.get); //"undefined"
    
    var descriptor = Object.getOwnPropertyDescriptor(book, "year"); 
    alert(descriptor.value); //undefined 
    alert(descriptor.enumerable); //false
    alert(typeof descriptor.get); //"function"