2007-10-20
Firefox (SpiderMonkey 1.5?) でリフレクション
初めて使ったのでまとめてみる。get, set は使わなかったので書かない。
__noSuchMechod__
foo.bar() で bar なメソッドが無かったら呼び出される。Ruby で云う method_missing で Perl で云う AUTOLOAD で php で云う __call とほとんど同じヤツ。
しかし property が無かったら呼びだせるような機構が解らなかった…。なにかあるんだろうか。おしえて!え○いひと!
__defineGetter__, __defineSetter__
オブジェクトやインスタンスがすでにある場合の getter/setter 定義。MDC に載ってる。
Core JavaScript 1.5 Guide:Creating New Objects:Defining Getters and Setters - MDC
すでに foo.a = 1; みたいに値がある場合、それを __defineGetter__, __defineSetter__ で上書きすると元の定義が消えてしまう。のでどこかに移すか、_a とかリネームしてやる必要がある。
__lookupGetter__, __lookupSetter__
getter/setter の定義があるかどうかを見て、あったらその関数を返してくれる。
関係ないけど、Firebug の Object DOM で列挙されないプロパティを作る方法ってあるんだろうか。
できてしまった
どうするよ。ひさしぶりによるはっくでじゅうじつ。
もうちょい使い込んでこいつだけ切り出して google code に登録しようかな。あとで。
こうふん
これはすごいことになるかもしれない。というのをおもいつくとねれなくなるね。