标签: method-interception

你能为被劫持的JavaScript数组添加一个函数吗?

这个问题与在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中劫持它,请告诉我们),但目前还不清楚是否有这是一个跨浏览器的解决方案.

javascript arrays method-interception

6
推荐指数
1
解决办法
599
查看次数

标签 统计

arrays ×1

javascript ×1

method-interception ×1