短いバージョンですが、私が理解していないのは次のコード行です。
(new Function("paper", "window", "document", cd.value)).call(paper, paper);
長いバージョンでは、次の関数を見てください。
window.onload = function () {
var paper = Raphael("canvas", 640, 480);
var btn = document.getElementById("run");
var cd = document.getElementById("code");
(btn.onclick = function () {
paper.clear();
paper.rect(0, 0, 640, 480, 10).attr({fill: "#fff", stroke: "none"});
try {
(new Function("paper", "window", "document", cd.value)).call(paper, paper);
} catch (e) {
alert(e.message || e);
}
})();
};
このコードは Raphael プレイグラウンドからのものです。つまり、raphael ライブラリを実装しています。したがって、私が理解できない上部のコードの 1 行 (try/catch 式の内部にあります) は、cd.value 内に格納されているユーザーが入力したコードを関数にコピーするとします。しかし、それはどのように可能ですか?
こちらのページにアクセスできます: http://raphaeljs.com/playground.html