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において) 、スクリプトはシンタックスエラーを引き起こします。