A Day in the Life

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 に登録しようかな。あとで。

こうふん

これはすごいことになるかもしれない。というのをおもいつくとねれなくなるね。

記事の一覧 >