瀏覽器對(duì)象模型(BOM)的核心對(duì)象是window阻桅,表示的是一個(gè)瀏覽器的實(shí)例。window對(duì)象即是訪問(wèn)瀏覽器的一個(gè)接口,也是規(guī)定的一個(gè)全局對(duì)象灭将。在全局作用域中聲明的任何一個(gè)變量,函數(shù)都會(huì)成為window對(duì)象的屬性和方法后控。
如上庙曙,定義在全局中的變量age和全局中的函數(shù)say(),其實(shí)都是在window對(duì)象下面的浩淘,我們都可以通過(guò)window對(duì)其進(jìn)行訪問(wèn)捌朴。
定義在全局中的屬性和直接掛載在window上面還是有一定的區(qū)別。掛載在window上面的屬性可以通過(guò)delete操作符進(jìn)行刪除张抄,而直接定義在全局中的變量是無(wú)法通過(guò)delete操作符進(jìn)行刪除的砂蔽。這是因?yàn)樵谌种新暶鞯膶傩云鋵傩蕴匦灾杏衃[Configurable]]特性,其值為false所以這樣的值是無(wú)法通過(guò)delete操作符進(jìn)行刪除掉的署惯。
還有一個(gè)要注意的是左驾,直接訪問(wèn)未聲明的變量是會(huì)報(bào)錯(cuò)的,如果通過(guò)window訪問(wèn)沒(méi)有聲明的變量會(huì)返回undefined极谊,但是不會(huì)進(jìn)行報(bào)錯(cuò)诡右。如下:
如果頁(yè)面中包含框架,則每個(gè)框架都含有自己的window對(duì)象轻猖,并且保存在frames集合中帆吻。在frames集合中我們可以通過(guò)索引進(jìn)行訪問(wèn),或者通過(guò)框架名稱訪問(wèn)相應(yīng)的window對(duì)象咙边。每個(gè)window對(duì)象都有一個(gè)name屬性猜煮,name屬性的值就是框架的名稱。
看下如上結(jié)構(gòu)败许,上述代碼中創(chuàng)建了一個(gè)框架集友瘤,其中一個(gè)框架居上,兩個(gè)框架居下檐束。我們可以通過(guò)window.frames[0]或者window.frames['topFram']來(lái)對(duì)上方的框架集引用辫秧,我們還可以通過(guò)top來(lái)進(jìn)行引用,例如top.frames[0]或者top.frames['topFram']被丧。
top是始終指向的最外層的框架盟戏,也就是瀏覽器窗口對(duì)象(window)。但是有的時(shí)候卻不是這樣甥桂,因?yàn)樵谝粋€(gè)框架中柿究,其中的window指向的是那個(gè)框架的特定實(shí)例。而不是最外層的框架黄选。所以使用top可以確保在一個(gè)框架中能夠訪問(wèn)到另外一個(gè)框架蝇摸。
和top相對(duì)應(yīng)的是另外一個(gè)window對(duì)象是parent對(duì)象婶肩,parent 對(duì)象始終指向的是當(dāng)前框架的直接上層框架,所以在某些情況下top和parent的指向是相等的貌夕,在沒(méi)有框架的情況下top和parent是相等的律歼,都等于window。
和框架有關(guān)的還有一個(gè)對(duì)象是self對(duì)象啡专,它始終指向的是window對(duì)象险毁。top,parent们童,self都是window對(duì)象的屬性畔况。