這個問題是關係到What are the best practices to follow when declaring an array in Javascript?你可以添加一個函數到被劫持的JavaScript數組嗎?
比方說,一個客戶端,我們姑且稱之爲"D. B. Cooper",有下面的代碼必須在其他任何JavaScript代碼之前運行第一個要求:
Array = function(){
alert('Mwahahahaha');
};
此外, Cooper要求必須將自定義函數添加到Array
內建的對象中(而不是被劫持的對象)。例如,如果Array
被unhijacked,這將是與完成:
Array.prototype.coolCustomFunction = function(){
alert('I have ' + this.length + ' elements! Cool!');
};
這將提供:
var myArray = [];
myArray.coolCustomFunction();
然而,這不符合第一項要求相兼容。因此,你如何能夠最好地滿足D.B.庫珀的要求?
注意: D.B.甚至寫了a test fiddle幫助確保解決方案符合他的要求......真是個好人!
更新: 對於那些你們誰喜歡挑戰:請嘗試找到一個unhijackable跨瀏覽器解決了這個問題。例如,here's是劫持Array,Object,Array.prototype.constructor和Object.prototype.constructor的更劫持的測試用例(感謝重新格式化此Bergi)。到目前爲止,看起來似乎可能有針對瀏覽器的解決方案(請參閱Bergi's comment on his answer,如果您在FF中找到劫持它的方法,請告訴我們),但目前還不清楚是否存在跨瀏覽器解決這個問題。
這個問題的格式應SO – rjz 2012-07-17 16:48:38
需要學習材料新海報發送需求文檔回到DB Cooper和堅持使用情況的每一個需求。 :) – Quentin 2012-07-17 16:59:33
@Quentin:如果你能找到他,那將是一個不錯的選擇:) – Briguy37 2012-07-17 17:15:33