Javascript 我可以找出主机函数是否被覆盖吗?

Javascript 我可以找出主机函数是否被覆盖吗?,javascript,Javascript,是否可以检查浏览器提供的功能是否已被用户代码替换 function alert(str){ document.write(str); } alert('hello world'); 你可以查一下 if (/function alert\(\) \{\s*\[native code\]\s*\}/.test(alert)) 正则表达式是必需的,因为Firefox返回换行符 请注意,通过覆盖alert.toString或Function.prototype.toString可以很容易地

是否可以检查浏览器提供的功能是否已被用户代码替换

function alert(str){
    document.write(str);
}

alert('hello world');
你可以查一下

if (/function alert\(\) \{\s*\[native code\]\s*\}/.test(alert))
正则表达式是必需的,因为Firefox返回换行符


请注意,通过覆盖
alert.toString
Function.prototype.toString

可以很容易地解决这一问题。不可能知道浏览器方法是否过度使用。e、 g

function foo(){
  return 'foo was called';
}

foo.toString = function() {
                 return 'function alert() {\n    [garbage code]\n}';
               };
var a = window.alert;
window.alert = foo; 

a(window.alert);  
document.write(alert);

您所能说的就是,如果您没有得到默认响应,该方法可能已被修改,因为宿主方法的toString方法通常是只读的。但是如果您得到默认值,您不知道它是否被修改。

否。无法检查主机对象是否被覆盖完全不可靠,因为toString方法不能保证为只读。任何与宿主方法有冲突的人都可以修改它的
toString
方法,以返回他们想要的任何值,包括默认值(我认为它在任何地方都不是标准化的)。