【发布时间】:2012-12-09 00:52:42
【问题描述】:
一般问题:当像 Array 这样的默认 Javascript 原型被修改、破解、更改和扭曲到无法使用的程度时,有没有办法创建(或重新实现)的实例原始的、未修改的原型?
我的情况:我有一些代码在(可怕的、专有的、封闭源代码的......)内容管理系统的“编辑”模式下失败,因为用于内容管理系统的“编辑”模式界面破解了Array原型的绝对生活地狱。
我的代码可以在 CMS 的非编辑模式下工作,但是,为了实现这一点,它已经在“编辑”模式下进行了测试。 It's possible to test if a prototype has been modified。是否可以重新实现默认的 Array 原型,以便我可以执行以下操作:
var hasArrayBeenTrashed = // boolean based on https://stackoverflow.com/questions/574584/
var normalArray.prototype = // based on answer to this question
var myArray = !hasArrayBeenTrashed ? [] : new normalArray;
【问题讨论】:
-
您始终可以创建一个空的
iframe来创建新的 JavaScript 上下文并从那里获取对未修改结构的引用。但是有些东西,比如arr instanceof Array,会失败。我想以前有人问过类似的问题,会尝试找到它。 -
在您需要的环境中可能没有太多用处,但您可以利用 WebWorker 创建新上下文,在安全环境中执行操作,然后将结果发布回来。
-
@FelixKling 好主意!我会试试看。我确实需要
arr instanceof Array,但如果我只是将Array 克隆为normalArray,即使它没有被修改,我仍然可以使用arr instanceof normalArray?我确实首先寻找受骗者,所以如果有的话,他们可能使用不同的搜索词。
标签: javascript arrays object prototype