私は最近、動的に JavaScript で JavaScript 関数を書き換える必要がありました。私がそれを行うのが簡単で、それがどれほど楽しかったかは、私を驚かせました.
ここにいくつかの HTML があります。
<div id="excelExport1234"
onclick="if(somestuff) location.href='http://server/excelExport.aspx?id=56789&something=else'; else alert('not important');"
>Click here to export to excel</div>
また、出力された HTML を変更することはできませんでしたが、そのリンクに追加のパラメーターを追加する必要がありました。私はそれについて考え始め、これを行うことができることに気付きました:
excelExport = $('excelExport1234');
if (needParam)
eval('excelExport.onclick = ' + excelExport.onclick.toString().replace("excelReport.aspx?id", "excelReport.aspx?extraParam=true&id") + ';');
else
eval('excelExport.onclick = ' + excelExport.onclick.toString().replace("extraParam=true&", "") + ';');
そして、それはチャンピオンのように機能しました!excelExport.onclick は、文字列に変換して文字列操作を行う関数オブジェクトを返します。"function() { ... }" の形になったので、戻って dom オブジェクトの onclick イベントに割り当てます。eval を使用しなければならないのは少し見苦しいですが、私の知る限り、コードの文字列を取得してオブジェクトにうまく変換できる JavaScript 関数コンストラクターはありません。
とにかく、私の要点は、私が超賢いということではありません (私はそうではありません)。私の要点は、これがかっこいいということです。そして、これを実行できる言語は JavaScript だけではないことを私は知っています。Lisp にはまさにこの目的のために、何年も前からマクロが用意されていると聞いたことがあります。マクロを本当に理解するには、Lisp を本当に理解する必要がありますが、私はそれを理解していません。
だから私の質問は:他のどの言語で関数を(簡単に)動的に書き換えることができますか?簡単な例を見せてもらえますか? 他にどこでこれを行うことができるか、どのように行われるかを知りたいです!
(また、これに何をタグ付けするかわからないので、ランダムな推測をしました)