首页 > 网站 > WEB开发 > 正文

BOM详解

2024-04-27 14:23:50
字体:
来源:转载
供稿:网友

BOM详解

1.WINDOW对象

BOM的核心对象是WINDOW,它表示一个浏览器的实例。在浏览器中,window对象有双重角色,它既是通过

javaScript访问浏览器的一个接口,又是ECMAScript规定的Global对象。这意味着,在网页中定义任意一个对象,变量和函数,都以WINDOW作为其Global对象,因此有权访问parseInt()等方法。

1.1全局作用域

由于WINDOW对象同时扮演者ECMAScript中Global对象的角色,因此所有在全局作用域中声明的变量,函数都会变成window对象的属性和方法,下面来来例子。

var age=22;function sayAge(){    alert(this.age);    }alert(window.age);  //22sayAge();     //22window.sayAge();   //22
View Code

我们在全局作用域中定义了一个变量age和一个函数sayAge(),它们被自动归在了window对象名下。于是,可以通过window.age访问变量age.可以通过window.sayAge()访问函数sayAge().由于sayAge()存在于全局作用域中,因此this.age被映射到window.age,最终显示的仍然是正确的结果。

抛开全局变量会成为window对象的属性不谈,定义全局变量与在WINDOW对象上直接定义属性还是有点差别:全局变量不能通过delete操作符删除,而直接在window对象上定义的可以。

例如:

var age=44;window.color="red";delete window.age;delete.window.color;alert(window.age); //44alert(window.color); //undefined
View Code

刚才使用var语句添加的window属性有一个名为[[configurable]]的特性,这个特性的值被设置为false,因此这样定义的属性不可以通过delete操作符删除。IE8以及更早版本在遇到使用delete删除window属性的语句时,不管该属性是如何创建的,都会抛出错误,以示警告。IE9以及更高版本不会抛出错误。

另外,还要记住一件事:尝试访问未声明的变量会抛出错误,但是通过查询window对象,可以知道某个可能未声明的变量是否存在,例如:

//这里会抛出错误,因为oldValue未定义var newValue=oldValue;//不会抛出错误,这是一次属性的查询,newValue的值是undefinedvar newValue=window.oldValue;

 注意:Window Moblie 平台的IE浏览器,不允许通过window.PRototype=value之类的形式

直接在window对象上创建新的属性或方法。可是,在全局作用域中声明的所有变量和函数,照样会变成WINDOW对象的成员。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表