重写window对象的方法不是一件新奇的事,比如我们可能需要改变默认alert的行为,如何安全的重写呢?

小菜看到某知名IT网站是这样的写法:

window.alert = function(){};

或者

alert = function(){};

实际上,这种写法有些欠妥。这相当于在window对象上添加了一个alert属性,它的优先级比系统内置的alert高,所以可以达到重写的效果,但这很容易突破,执行以下语句,就会还原alert。

delete window.alert;

因为通过这种方式重写的alert,只不过是window对象的一个属性而已,可以通过delete操作符删除。

如何才能永久重写,不可逆转呢?

只需定义一个全局变量即可!全局变量虽然也会注册为window对象的一个属性,但它不可删除,它是事实上绝对存在的。代码如下:

var alert = function(){};

这样重写的方法,是绝对不会被还原的,安全可靠!

如何真正重写window对象的方法的更多相关文章

  1. JavaScript DOM编程基础精华01(DOM入门,DOM模型和获取页面元素,事件,window对象的方法)

    DOM入门 DOM就是Html页面的模型,将每个标签都做为一个对象,JavaScript通过调用DOM中的属性.方法就可以对网页中的文本框.层等元素进行编程控制.比如通过操作文本框的DOM对象,就可以 ...

  2. 《JavaScript权威指南》学习笔记 第五天 window对象的方法。

    前天和昨天大致浏览了犀牛书的函数.类与模块.正则表达式.JavaScript扩展.以及服务端的js.这些方面对于我目前的水平来说比较难,一些最基本的概念都不能领会.不过最复杂的知识占用平时使用的20% ...

  3. 在JavaScript中重写jQuery对象的方法

    jQuery是一个很好的类库,它给我们解决了很多的客户端编程,任何东西都不是万能的,当它不能满足我们的需求时我们需要对它进行重写,同时也不要影响其原有的功能或者修改其原有的功能:我现在的web应用程序 ...

  4. window对象的方法和属性汇总

    window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval mov ...

  5. window对象open方法详解

    window.open详解 window.open("sUrl","sName","sFeature","bReplace&quo ...

  6. JQuery获取iframe中window对象的方法-contentWindow

    document.getElementsByTagName('iframe')[0].contentWindow 获取到的就是iframe中的window对象.

  7. window对象的方法

    window.alert('大家好!');//弹出警告对话框 window.confirm('确定要删除吗?');//确定.取消对话框,返回true或false; window.navigate(ur ...

  8. JavaScript BOM-11-BOM的核心-window对象; window对象的控制,弹出窗口方法; 超时调用; 间歇调用; location对象常用属性; 位置操作--location.reaplace,location.reload(); BOM中的history对象; Screen对象及其常用属性; Navigator对象;

    JavaScript BOM 学习目标 1.掌握什么是BOM 2.掌握BOM的核心-window对象 3.掌握window对象的控制.弹出窗口方法 什么是bom BOM(browser object ...

  9. JS window对象详解

    window 是客户端浏览器对象模型的基类,window 对象是客户端 JavaScript 的全局对象.一个 window 对象实际上就是一个独立的窗口,对于框架页面来说,浏览器窗口每个框架都包含一 ...

随机推荐

  1. shellcode流程

    shellcode就是汇编的opcode,一般以子函数形式出现: 取得shellcode的方便方式是: 1.写一个函数如: void __stdcall code(LONG &a, LONG ...

  2. scala学习心得(2)

    scala类中可以通过override 重载方法 scala定义的函数式类不可被改变,这样传进去的参数就需要提前被检验,可以通过scala.predef包中的方法require方法 定义辅助构造器 d ...

  3. 使用__slots__

    [使用__slots__] 参考: 1.http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a0 ...

  4. NLPP-03-Exercises

    <PYTHON自然语言处理>第3章 处理原始文本 更多更复杂有关处理HTML内容 http://www.crummy.com/software/BeautifulSoup/ 3.11 深入 ...

  5. 第3章 C#中的委托和事件

    .NET框架中的委托和事件 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  6. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  7. myBatis自动生成mapping,dao和model

    myBatis没有自动封装实体类.所以都需要自己编写,但是表数据过多时.编写难度就会增加,错误率也会增加! 所以myBatis提供mybatis-generator-core-1.3.2-bundle ...

  8. jsp学习---css基础知识学习,float,position,padding,div,margin

    1.常用页面布局 效果图: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  9. 【笔记】Python 学习Tips

    Lambda Python中给予的定义是用来创建匿名的简单函数(单行).基本的应用场景就是替换简单函数的定义. >>> fl = lambda x : x % 3 >>& ...

  10. SSE:服务器发送事件,使用长链接进行通讯

    概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据.比如,每当收到新的电子邮件,服务器就向浏览器发送一个“通知”,这要比浏览器按时向服务器查询(po ...