XSS の課題をいじっていたときに、Javascript でテンプレート文字列 (括弧の代わりに ``) を使用して Function オブジェクトを作成すると、奇妙な動作に遭遇しました。
私が理解しているように、呼び出すとき
alert`1`
それは本質的に同じです
alert(["1"])
ここで説明されているように。テンプレート文字列を使用して Function オブジェクトが作成された場合を除いて、多くのケースをテストしましたが、どこでもそのように機能しました。
次のコードを実行する場合:
var x = new Function`alert(1)`;
console.log(x.constructor);
Object クラスのインスタンスは、コンストラクタ本体に alert(1) 関数を使用して作成されるため、すぐに実行されます。
私が正しく理解していれば、それは同じように実行されるべきです
var y = new Function(["alert(1)"]);
console.log(y.constructor)
本体に alert(1) を含む Function オブジェクトを返すだけで、このように呼び出すことができます
var y = new Function(["alert(1)"]);
y();
オブジェクトを作成するとき、この不一致はどこから来るのか、またはテンプレート文字列の扱いが異なるのでしょうか?