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
方法,以返回他们想要的任何值,包括默认值(我认为它在任何地方都不是标准化的)。