最終更新日 2024-09-25

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

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

以前なら、

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);