踊る犬.netブログ (旧)

[JavaScript] Getter/Setterをオブジェクト初期化子で定義する方法

koaのソースコード を読んで知ったのでメモ。

一般的な定義方法

JavaScriptではオブジェクトにSetter/Getterを定義できます。
Setter/Getterとは、プロパティの設定時・参照時に呼び出されるメソッドのことです。

一般的には以下のように定義します:

var o = function() {};
o.prototype.__defineGetter__("b", function() { return this.a + 1; });
o.prototype.__defineSetter__("c", function(x) { this.a = x / 2; });

var i = new o();
i.c = 10;
console.log(i.b);

オブジェクト初期化子を使った定義

このSetter/Getterは、オブジェクト初期化子を使っても定義できます。

var o = {
  a: 7,
  get b() { return this.a + 1; },
  set c(x) { this.a = x / 2; }
};

var i = Object.create(o);

このように、get, setプレフィックスをつけて関数を定義します。

ブラウザ側で使う際の注意

MDNのドキュメント によると、ブラウザ実装状況は以下の通りです:

機能 Firefox (Gecko) Chrome Internet Explorer Opera Safari
基本サポート 2.0 (1.8.1) 1 9 9.5 3

サポートされていない場合 (特にIE6-8において) 、スクリプトはシンタックスエラーを引き起こします。

参考資料