我刚刚发现我们可以在实际执行之前拦截 javascript alert() 本机调用并挂钩用户代码。查看示例代码..
function Test(){
var alertHook=function(aa){
this.alert(aa);
}
this.alert("aa");
this.alert = alertHook;
alert("aa");
}
所以每次我调用 alert("aa") 时都会被我的 alertHook 本地函数拦截。但是下面的小改动实现不起作用。
function Test(){
var alertHook=function(aa){
alert(aa);
}
alert("aa");
alert = alertHook; //throws Microsoft JScript runtime error: Object doesn't support this action
alert("aa");
}
它会引发Microsoft JScript 运行时错误:对象不支持此操作。
我不知道这个.alert = alertHook; 让我拦截电话,但 alert=alertHook; 不是。??
所以我假设使用它来拦截任何本机 js 方法。?那正确吗?
这是可以接受的吗?因为这样我可以用我自己的方法完全替换任何本机 JS 调用??
更新:
我问这样可以接受吗?因为这是一个拥有 eval() 并让用户替换本机函数调用的好方法?
并且它保护开发人员免受误导性功能的语言的责任,在窗口级别(或在公共框架 js 文件中)替换本机 js 调用会使整个系统崩溃.. 不是吗?
我认为我可能错了,因为我不明白这个功能背后的原因..?我从来没有见过一种语言可以让开发人员替换自己的实现..