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