这个问题是关系到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