【发布时间】:2023-12-26 12:43:01
【问题描述】:
我的 javascript 窗口中有一个重写的 String.prototype。
window.String.prototype.toUpperCase = ()=>{return "overridden"}
我有一个没有被触及的 iframe 窗口的引用,我想用它来创建一个没有被覆盖函数的新字符串:
console.log(iframe.contentWindow.String("newstring").toUpperCase());
// prints "overridden"
如何在没有覆盖函数的情况下创建新字符串?
对于使用新 iframe 覆盖的 Array.prototype,但不适用于 String。
console.log(iframe.contentWindow.Array(1,2,3).filter(a=>a));
// that works - prints - [1,2,3]
注意
我知道不应该这样做。我在问如何在另一个 3rd 方库这样做的情况下修复它。
【问题讨论】:
-
这基本上就是你不应该这样做的原因。添加一个new
toUpperCase方法,使用不同的签名,不要覆盖现有的 -
我正在修复第 3 方库问题。自己不做。
-
@VLAZ 奇怪 - 它解决了数组原型问题,但没有解决字符串原型问题。
标签: javascript string overriding