Javascript 恢复重写的字符串原型

Javascript 恢复重写的字符串原型,javascript,string,overriding,Javascript,String,Overriding,我的javascript窗口中有一个重写的String.prototype window.String.prototype.toUpperCase = ()=>{return "overridden"} 我有一个未被触动的iframe窗口引用,我想用它创建一个新字符串,而不使用重写函数: console.log(iframe.contentWindow.String("newstring").toUpperCase()); // prints &q

我的javascript窗口中有一个重写的String.prototype

window.String.prototype.toUpperCase = ()=>{return "overridden"}
我有一个未被触动的iframe窗口引用,我想用它创建一个新字符串,而不使用重写函数:

console.log(iframe.contentWindow.String("newstring").toUpperCase());
// prints "overridden"
如何在没有重写函数的情况下创建新字符串

对于重写的
数组。原型
使用新的iframe工作,但不适用于
字符串

console.log(iframe.contentWindow.Array(1,2,3).filter(a=>a));
// that works - prints - [1,2,3]
注意


我知道不应该这样做。我在问,在另一个第三方库这样做的情况下,如何修复它。

问题是
iframe.contentWindow.String(“newstring”)
只返回一个字符串,与
string(“newstring”)
“newstring”
计算的原语字符串相同。当访问该字符串上的方法时,将使用当前领域中的
string.prototype
,它的
toUpperCase
已损坏

您需要创建一个实例来获取从iframe的
字符串继承的

const stringObj = new iframe.contentWindow.String("newstring");
console.log(stringObj.toUpperCase());
但是,只恢复方法更容易:

String.prototype.toUpperCase = iframe.contentWindow.prototype.toUpperCase;
console.log("newstring".toUpperCase());

这就是为什么你不应该这样做。添加一个新的
toUpperCase
方法,使用不同的签名,不要覆盖现有方法我正在解决第三方库问题。我自己不做,这能回答你的问题吗@奇怪的是,VLAZ解决了数组原型问题,但没有解决字符串原型问题。