这个问题与在Javascript中声明数组时要遵循的最佳实践有关?
假设一个客户端,我们称之为"DB Cooper",首先要求以下代码必须在任何其他JavaScript代码之前运行:
Array = function(){
alert('Mwahahahaha');
};
Run Code Online (Sandbox Code Playgroud)
此外,Cooper要求必须将自定义函数添加到内置Array对象(而不是被劫持的对象).例如,如果Array未被劫持,则可以通过以下方式完成:
Array.prototype.coolCustomFunction = function(){
alert('I have ' + this.length + ' elements! Cool!');
};
Run Code Online (Sandbox Code Playgroud)
哪个能买得起:
var myArray = [];
myArray.coolCustomFunction();
Run Code Online (Sandbox Code Playgroud)
但是,这与第一个要求不兼容.那么,您如何才能最好地满足DB Cooper的要求呢?
注意: DB甚至写了一个测试小提琴来帮助确保解决方案满足他的要求......真是个男人!
更新: 对于那些喜欢挑战的人:请尝试找到解决此问题的无法解决的跨浏览器解决方案.例如,这是一个更劫持的测试用例(感谢重新格式化这个Bergi),它劫持了Array,Object,Array.prototype.constructor和Object.prototype.constructor.到目前为止,看起来可能有一个特定于浏览器的解决方案(参见Bergi对他的回答的评论,如果你找到一种方法在FF中劫持它,请告诉我们),但目前还不清楚是否有这是一个跨浏览器的解决方案.