在JavaScript中重写数组文字
Overriding array literal in JavaScript
我的应用程序(一个自定义web浏览器)是注入代码到一个页面,有一个修改的Array
原型(特别是因为它使用prototype.js)。我想确保我注入的代码使用正常的Array
。我使用的代码从https://stackoverflow.com/a/15147986/502149重置原型,这工作很好,如果我说:
(function(Array) {
var array = new Array();
)(ArrayWithUnmodifiedPrototype);
但是,如果我输入
,我仍然会得到修改后的原型(function(Array) {
var array = [];
)(ArrayWithUnmodifiedPrototype);
我不确定这是否会成为一个问题(我注入的代码中的一些第三方库理论上可以使用[]
),但无论哪种方式,我都很好奇:是否有任何方法可以覆盖[]
,因此它在全局范围内使用与当前Array.prototype
不同的原型?
没有。这实际上是使用字面量的好处之一。:-)但是在你特殊的特殊情况下,这就不那么有用了。
只是为了完整:
假设你显然有一个未修改的Array.prototype
的引用(我基于你的ArrayWithUnmodifiedPrototype
符号),你可以通过每次需要创建数组或调用其中一个第三方库来交换东西来解决这个问题。(这显然不太理想。)
例如:
var oldPrototype = Array.prototype;
Array.prototype = ArrayWithUnmodifiedPrototype.prototype;
/*...call third-party lib that might use []...*/
Array.prototype = oldPrototype;
但是,如果第三方的东西正在处理ajax回调之类的东西,您可能很难将代码插入其中以交换原型。
可能最好的事情是确保你注入的代码可以与任何合理的修改Array.prototype
(例如PrototypeJS所做的,尽管它仍然覆盖像Array.prototype.map
这样的东西,即使它们存在…)。
相关文章:
- 是索引数组文字的好做法
- 如何避免“;使用数组文字表示法“;以下javascript代码中的jslint错误
- 是否可以将字符串转换为文字对象数组
- 如何检查文字对象是否在 Javascript 数组中
- 为什么有逗号但没有元素的数组文字的长度不为0
- 如何在 JS 中编写数组文字表示法
- Javascript 数组“文字” - 这只是描述它是如何创建的,因为它可以即时更改
- 如何简化 JavaScript/ECMAScript 数组文字生成
- JavaScript/ECMAScript 数组文字生产的 LOOKAHEADs
- Javascript 对象数组文字的可靠长度
- 为什么JSLint告诉我“;使用数组文字符号[]&”;
- 最奇怪的javaScript数组文字
- 带字符串拆分的JS Lint数组文字符号
- JavaScript数组文字定义中逗号后面的值是什么
- 在JavaScript中重写数组文字
- 为什么在javascript中[,]是一个有效的数组文字
- 数组对象与数组文字-性能JavaScript
- 数组文字方法调用和对象文字方法调用的区别
- Js:多维数组文字声明:添加元素
- 如何使用 HJScript 或 HJavaScript 创建数组文字