関数は、toString() でアクセスすると、コードが取得できる

JavaScriptの関数は、toString() でアクセスすると、コードが取得できます。
コードのドキュメントを作るときとか、説明でコードが必要なときに、HTMLで書かなくても表示させられると、変更時の修正が不要で便利になるかも。

Tecd・Ed2008 DVD から ライトニングトークを参考。


やっていること。

関数を表示させて、
さらに、その関数を文字列置換で書き換えて、
さらに変更後を表示。

<div id="test" style="color:blue;" onMouseOver="mouse_in()" onMouseOut="mouse_out()">
ここにマウスをノセテネ
</div>
<hr/>
<div id="src1">1</div>
<hr/>
<div id="src2">2</div>
<hr/>

<script type="text/javascript">

function set_text(e,t)
{
	if (typeof e.textContent != "undefined")
	{
		e.textContent = t;
	}
	else
	{
		e.innerText = t;
	}
}

function mouse_in()
{
	test.style.color = 'red';
}

function mouse_out()
{
	test.style.color = 'blue';
}

function change_function()
{
	var f1 = mouse_in.toString();
	set_text(src1, f1);

	f1 = f1.replace("red", "green");

	eval( "mouse_in = " + f1 );

	var f2 = mouse_in.toString();
	set_text(src2, f2);
}
change_function();

</script>

Firefoxでは動いてますが、IEでは関数の書き換えに失敗しています。