javascript可以覆盖默认类型,比如 var Docuemnt = 3; 如果是undefined 我们可以通过 void(0) 来找回。 但是其他一些类型怎么找回,比如Text,Document?
认证高级PHP讲师
可以考虑使用 delete 来恢复。例如
alert = 111; delete alert; alert('test');
甚至可以考虑创建一个 iframe,然后用 iframe 下的对应类型覆盖掉自身。
---update---
多扯两句,为啥 delete 可以恢复。
因为一些方法都是宿主环境的原型上面的方法,例如A.prototype.alert。
A.prototype.alert
通常我们使用的时候,A 下没有 alert 方法,所以就去查找 A 的原型,然后发现原型有 alert 方法,然后就成功执行了。
我们覆盖那些默认方法的时候,是相当于给 A.alert 赋值。根据变量查找的顺序,先找到 A.alert 了,所以就执行了。所以,我们只要 delete 掉 A.alert,执行的时候,就会找到原型上的 alert,也就恢复了。
A.alert
alert
可以考虑使用 delete 来恢复。例如
甚至可以考虑创建一个 iframe,然后用 iframe 下的对应类型覆盖掉自身。
---update---
多扯两句,为啥 delete 可以恢复。
因为一些方法都是宿主环境的原型上面的方法,例如
A.prototype.alert
。通常我们使用的时候,A 下没有 alert 方法,所以就去查找 A 的原型,然后发现原型有 alert 方法,然后就成功执行了。
我们覆盖那些默认方法的时候,是相当于给
A.alert
赋值。根据变量查找的顺序,先找到A.alert
了,所以就执行了。所以,我们只要 delete 掉A.alert
,执行的时候,就会找到原型上的alert
,也就恢复了。