gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:14:40 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com