ECMAScript 5th から正式に getter/setter が作れるようになったわけだが、これはMozilla の JavaScript である SpiderMonkey では前々から実装されていた。 { get foo() { return ...; } } { set foo(val) { return ...; } } に加え、 Object.prototype.__defineGetter__ Object.prototype.__defineSetter__ が使えたわけだ。 で、これを使用したハックとして、以下のようなものがある。 function Foo () { this.__defineGetter__("bar", function(){ var val = "BAR"; delete this.bar; return this.bar = val; });