この質問は、Javascriptで配列を宣言するときに従うべきベストプラクティスは何ですか?に関連しています。
クライアントを「DBクーパー」と呼びましょう。最初の要件として、次のコードを他のJavaScriptコードの前に実行する必要があります。
Array = function(){
alert('Mwahahahaha');
};
さらに、Cooperでは、カスタム関数を(ハイジャックされたオブジェクトではなく)組み込みオブジェクトに追加する必要がありますArray
。たとえば、ハイジャックされていない場合Array
、これは次のように実行されます。
Array.prototype.coolCustomFunction = function(){
alert('I have ' + this.length + ' elements! Cool!');
};
どちらが余裕があるでしょう:
var myArray = [];
myArray.coolCustomFunction();
ただし、これは最初の要件と互換性がありません。したがって、どのようにしてDBCooperの両方の要件を最もよく満たすことができますか?
注: DBは、ソリューションが彼の要件を満たしていることを確認するためのテストフィドルも作成しました...なんて素晴らしいことでしょう。
更新: チャレンジが好きな人のために:この問題に対するハイジャックできないクロスブラウザソリューションを見つけてみてください。たとえば、 Array、Object、 Array.prototype.constructor、およびObject.prototype.constructorをハイジャックするさらにハイジャックされたテストケース(このBergiを再フォーマットしてくれてありがとう)があります。これまでのところ、これにはブラウザ固有の解決策があるようです(Bergiの回答に関するコメントを参照し、FFでハイジャックする方法を見つけたらお知らせください)が、現時点では不明です。これに対するクロスブラウザソリューション。