javascript - 在 JavaScript 中重写数组字面量

标签 javascript arrays prototype

我的应用程序(自定义网络浏览器)正在将代码注入(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/

相关文章:

javascript - 尝试输出多维数组时,AngularJS 中的 ng-repeat 不起作用

Javascript:对象还是Object.prototype?

java - 如何在 Scala 中制作功能齐全的不可变类?

javascript - 是否可以/建议使用正则表达式解析我的用户输入字符串?

java - 移动到相邻空间拾取硬币的二维阵列游戏

javascript - 创建一个新选项并使用 mootools 1.2 注入(inject)选择框

使用数组或列表的 C# actionresult 过滤器

javascript - Javascript什么时候可以开始调用Actionscript?

javascript - 如何判断该方法返回 True 还是 False?

java - Visual Studio 2013 企业版 : Oracle Java SDK A more recent version of this software is required