我的应用程序(自定义网络浏览器)正在将代码注入(inject)到具有修改后的 Array
原型(prototype)的页面中(特别是因为它使用 prototype.js)。我想确保我注入(inject)的代码使用正常的 Array
。我正在使用 https://stackoverflow.com/a/15147986/502149 中的代码重置原型(prototype),如果我说:
(function(Array) {
var array = new Array();
)(ArrayWithUnmodifiedPrototype);
但是,如果我说:
(function(Array) {
var array = [];
)(ArrayWithUnmodifiedPrototype);
我不确定这是否会成为一个问题(我注入(inject)的代码中的某些第三方库理论上可以使用 []
),但无论哪种方式我都很好奇:是否存在有什么方法可以覆盖 []
以便它在全局范围内使用与当前 Array.prototype
不同的原型(prototype)?
最佳答案
不,没有。这实际上是使用文字的好处之一。 :-) 但在您的特殊情况下,它的帮助不大。
只是为了完整性:
鉴于您确实确实引用了未修改的 Array.prototype
(我将其基于您的 ArrayWithUnmodifiedPrototype
符号),您可以得到通过每次需要创建数组或调用其中一个第三方库时交换内容来解决这个问题。 (这显然不太理想。)
例如:
var oldPrototype = Array.prototype;
Array.prototype = ArrayWithUnmodifiedPrototype.prototype;
/*...call third-party lib that might use []...*/
Array.prototype = oldPrototype;
但是如果第三方的东西在 ajax 回调等中处理事情,您可能很难将代码插入以交换原型(prototype)。
可能最好的办法是确保您注入(inject)的代码适用于对 Array.prototype
的任何合理修改(例如 PrototypeJS 所做的,尽管大多数情况下都是合理的事实上它仍然会覆盖像 Array.prototype.map
这样的东西,即使它们在那里......)。
关于javascript - 在 JavaScript 中重写数组字面量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25084889/