~文法メモ~ オブジェクト初期化、プロパティ

  • オブジェクトのプロパティの部分は[...]で囲んでおけば、「式」を書いても良い

    以前なら、

    
    let i = 100;
    
    let o = {
      ["foo" + "100"]: 10,
      ["bar" + 100]: 20,
      [i * i]: 30,
      [(x => x*x)(10)] : 50
    };
    hm.debuginfo(o);
    
  • 新たに追加されたオブジェクト初期化構文

    以前なら、

    var a = "foo",
        b = 42,
        c = {};
    
    var o = {
      a: a,
      b: b,
      c: c
    };
    
    hm.debuginfo(o) // {"a":"foo","b":42,"c":{}}
    

    とする必要があったところをES6では、

    var a = "foo",
        b = 42,
        c = {};
    
    let o = { a, b, c }; // {"a":"foo","b":42,"c":{}}
    hm.debuginfo(o)
    

    とすることが出来るようになりました。

    関数も自然に定義出来る

    以前なら

    let myobj = {
        yy : 10,
        mymethod : function(x) { return x + 1 }
    }
    hm.debuginfo(myobj.mymethod(100));
    

    とする必要があったところをES6では、

    let myobj = {
        yy : 10,
        mymethod(x) { return x + 1 }
    }
    hm.debuginfo(myobj.mymethod(100));
    

    というように自然な記述で定義できます。

    C#のようなプロパティ(getter/setter)

    ES6の新機能というわけではないですが、「オブジェクト」もしくは「クラス」にて
    「C#のようなプロパティ(getter/setter)」を利用することが出来ます。
    クラスについては、別ページで解説されています。

    let myobj = {
        get count() {
            return this._count;
        },
    
        set count(value) {
            this._count = value;
        }
    }
    
    myobj.count = 10;
    hm.debuginfo(myobj.count);
    myobj.count++;
    hm.debuginfo(myobj.count);
    
    class MyObjClass {
        get count() {
            return this._count;
        }
        set count(value) {
            this._count = value;
        }
    }
    
    let myobj = new MyObjClass();
    myobj.count = 10;
    hm.debuginfo(myobj.count);
    myobj.count++;
    hm.debuginfo(myobj.count);