BOM 基本结构层次

BOM(Browser Object Model)浏览器对象模型

  • 主要功能:BOM 的主要功能是操作 HTML 内容之外的一些信息,为了实现 javascript 与浏览器之间的“对话”,比如新建窗口、Cookie 设置、浏览器版本信息的显示、浏览器窗口宽高的显示等。
  • 对象集合:浏览器对象模型是一个集合,包含了诸多能够对浏览器信息进行操作的对象(比如 navigator 对象、screen 对象、history 对象、location 对象等),但 BOM 的核心是 window 对象,当用户打开浏览器窗口,这个 window 对象就随之而产生,如果 HTML 页面中包含有 <iframe> <frame> 标签时候,对为每一个<iframe> <frame> 标签创建一个独立的 window 对象。navigator 对象、screen 对象、history 对象、location 对象等都是 window 的子对象。

BOM 基本语法 - window 对象

window 对象是全局对象,所有在全局作用域中声明的变量、对象、函数都会变成 window 对象的属性、对象、方法。
HTML DOM 的 document 也是 window 对象的属性之一:
window.document.getElementById("header");
等同于:
document.getElementById("header");
由此,我们可以明确规律:

  • 全局变量 是 window 对象的属性。
  • 全局函数 是 window 对象的方法。

BOM 基本结构层次
基于 window 对象是全局对象的概念,它下属的所有全局变量和函数都是它的属性,并且所有原生的构造函数及其它函数都存在与它的命名空间下,因此,在调用 window 对象的方法和属性时,可以省略 window 对象的引用。但在局部作用域中定义不会归入 window 对象名下,只有在全局作用域中定义才会被自动归入到 window 对象名下。

<script>
	var NameNew="Hevate";  //定义变量
	var ArrNew=new Array("one","two","three");  //定义对象
	function MyName(){  // 定义函数,不会直接执行,需要经过调用
		var NameNew = "liu"
		console.log("因为 MyName() 函数存在于全局作用域中,所以 this 被映射到 window,this.MyName 即是 window.MyName")
		console.log("MyName() 不加上 window 或 this:"+NameNew)
		console.log("MyName() 加上 this:"+this.NameNew)
		console.log("MyName() 加上 window:"+window.NameNew)  
	}
	/* 输出变量*/
	window.console.info("对于变量,加上 window 输出:"+NameNew)  //输出 Hevate
	console.info("对于变量,不加 window 同样输出:"+NameNew)
	/* 输出对象*/
	window.console.log("对于对象,加上 window 输出:"+ArrNew)  //输出 one,two,three
	console.log("对于对象,加上 window 输出结果相同:"+ArrNew)
	/* 输出函数*/
	window.MyName()  //调用 函数 MyName()
	MyName()  //调用 函数 MyName()
</script>  

因为 MyName() 函数存在于全局作用域中,所以 this 被映射到 window,this.MyName 即是 window.MyName
BOM 基本结构层次

Reference

JavaScript Window - 浏览器对象模型