JavaScriptの内部メカニズムを常識外の形で示したデモンストレーションにおいて、開発者のBartoszは、標準的な括弧を使用せずに任意の関数を呼び出す方法を共有しました。この技術は、エンジンがエラースタックトレースを処理する方法を操作することに依存しています。具体的には、V8などのエンジンでスタックトレースをフォーマットするために通常使用されるオプションAPIである`Error.prepareStackTrace`関数を上書きし、それを`Function`コンストラクタに置き換えることを含みます。これにより、システムは特定のデータ構造を実行可能なコードとして扱うことができるようになります。
このメカニズムには、典型的な構文制限を回避するための追加の2つのステップが必要です。まず、生のスタックトレースは有効なJavaScriptコードではないため、著者はプロトタイプ汚染(具体的には`Object.prototype.message`をターゲットとする)と`Array.prototype.toString`の上書きを組み合わせて使用します。配列の文字列表現を`Error.prototype.toString`メソッドに向けることで、ペイロードは位置の配列を目的のスクリプトに正常に変換できます。最後に、生成されたオブジェクトは「valueOfトリック」を使用して実行されます。これは、オブジェクトのデフォルトの`valueOf`メソッドを上書きすることで、加算演算子を通じてオブジェクトをプリミティブとして呼び出せるようにする手法です。
技術的には印象的ですが、このアプローチはクロスブラウザの互換性と可読性の面で実用的な制限に直面します。コメント欄では、`Error.prepareStackTrace`は主にV8で実装されているオプションAPIであるため、このハックはFirefoxなどの他の環境では失敗する可能性があることが指摘されました。さらに、難読化やピアレビューのリトマス試験として使用することを提案する意見がある一方で、`Symbol.iterator`のような標準機能が、括弧なしでロジックをトリガーする正当な方法をすでに提供していると指摘する者もいました。最終的なペイロードの複雑さは、言語の基礎となるオブジェクトモデルに備わっている極端な柔軟性と、潜在的な難読化の可能性を浮き彫りにしています。
