コードから始めましょう:
function say(name) {
var ghost=function () {
function ghost() {
alert('!');
};
return body;
};
eval("var body=''+"+name+';');
eval(name+('=('+ghost).replace('body', body)+')();');
eval(name+'();');
}
function Baal() {
if ('undefined'===typeof ghost) {
say('Baal');
return;
}
ghost();
}
say('Baal'); // or just Baal();
悪魔の名前が彼の存在を呼び起こすと言っているように見えます (まあ、彼は精神的な憑依のために誰かを必要としているのかもしれません) ..
ご覧のとおり、ゴーストは とともに存在しませんが、Baal
に があるので呼び出すことができます。eval
say(name)
say(name)
Baal
クロージャとしてコード本体に 再割り当てし、ghost
メソッドをキャプチャします。これが動作の仕組みです。しかし、私は避けようとしていeval
ます..
だから..質問を言い換えさせてください:
を使用せずに、存在しない (メンバーまたはグローバルではない) メソッドを呼び出し可能にするにはどうすればよいeval
ですか?