JavaScript の 関数名.caller は微妙だ
function hoge(x, f) { if (x === 1) { caller = hoge.caller hoge(2, function () { document.writeln(caller); document.writeln(hoge.caller); }); } else { f(); } } hoge(1, null);
↓実行結果
null function hoge(x, f) { if (x === 1) { caller = hoge.caller; hoge(2, function () {document.writeln(caller);document.writeln(hoge.caller);}); } else { f(); } }
一見フレームにアクセスできてるように見えるけど、実はグローバルなオブジェクトの属性値が変化している
(追記)arguments.callee.caller でも、arguments.callee が関数名でのアクセスと同じものなのでダメ。arguments.caller がそういう風に使えるものだったようだけど、だいぶ昔に廃止されている