Javascriptの関数を表示したい
例えば、
function increment(x){ return x + 1; }
という関数があったとして、
alert(increment(1) );
は当然2が表示される。で、Javascriptの関数とは普通の変数にFunctionオブジェクトが代入されたものらしいので
alert(increment)
とすることもできる。で、これは
function increment(x){ return x + 1; }
と関数の中身が表示される。
でもせっかくだから"increment"とか表示させてみたい。そこで、
function increment(x){ return x + 1; } increment.toString = function(){return "increment";};
とすると
alert(increment(1) ) // => 2 alert(increment) // => increment
というように元の関数の機能を保ったまま表示(文字列化)を変更することができる。
……ただのメソッドのオーバーライドじゃん!
クロージャだと
var makePlus = function(x){ var ret = function(y){ return x + y; } ret.toString = function(){return "Plus" + x;}; return ret; } var x = makePlus(10); alert(x); // => Plus10 alert(x(5) ); // => 15 var y = makePlus(5); alert(y); // => Plus5 alert(y(5) ); // => 10
少し楽しい。
で、なんでこんなことをしたのかというと、プログラミング言語Grass
ちょっと草植えときますね型言語 Grass
をJavascriptで書いていて、そのデバッグ用にこんなことができたらいいなあと思ったから。完成したらそちらの記事も書いてみたい。