概要: Javascript でオブジェクトの生成時、コールバック関数をフックさせる。
Javascript でなんらかのオブジェクトを生成する時にフックして、 任意の関数を実行させるスクリプトを作ってみた。
Object.hook = function ( ObjectName, callback ) {
var original = eval(ObjectName);
var evalCode = ObjectName + " = function () { return callback.apply( original.apply(null, arguments), arguments ) }";
eval(evalCode);
}
ライセンスは MIT-License で。使い方はこんな感じ。
var callback = function () { /* callbackの内容 */ }
Object.hook( 'String', callback ); // Stringの生成をフック
ただし、コンストラクタしかフックできないのと、 コンストラクタ経由でオブジェクトを生成しないと callback 関数は呼ばれなかったりする。
ぶっちゃけビルドインオブジェクトのコンストラクタを書き換えても、 Javascript の構文使ってオブジェクトを生成したら callback 関数は呼ばれないので、 あまり使えない。
たぶん Javascript の構文使ってオブジェクトを生成した場合、 オリジナルのコンストラクタの中身そのものが呼ばれるんだろうと思う。 だからフックはできない。
ただ、自作コンストラクタは何とかできるので、そういうのには使える様な気がする。
うーん、やっぱ使い道ないんじゃ……。
追記:2007-01-09T09:40:00
はてぶのコメントで、
引用元: b00kmark 面白いが、わざわざ MIT-License にするのはアレかもしれない。
と言われているので、ライセンスについてちょっと補足。
先にいっとくと、この Blog のテキストのライセンスは [[About /about]] にあるように、 自動的に Creative commons 帰属 - 非営利 2.1 日本になるので、僕の許可がないと営利ができんのですよ。
許可を出せばいい話なんだけど、いちいち面倒なので、MIT-License になってるわけです。 MIT-License って仕様許諾そのものと、著作者の明示さえすれば後は自由に使えるわけだから、 特に問題ないと僕は思ってたりする。
まあ、仕様許諾のコピーは面倒かも知れないけど、GPL よりかは手軽だと思うんだけどなぁ。
#FIXME