天天看點

BOM詳解

1.WINDOW對象

BOM的核心對象是WINDOW,它表示一個浏覽器的執行個體。在浏覽器中,window對象有雙重角色,它既是通過

JavaScript通路浏覽器的一個接口,又是ECMAScript規定的Global對象。這意味着,在網頁中定義任意一個對象,變量和函數,都以WINDOW作為其Global對象,是以有權通路parseInt()等方法。

1.1全局作用域

由于WINDOW對象同時扮演者ECMAScript中Global對象的角色,是以所有在全局作用域中聲明的變量,函數都會變成window對象的屬性和方法,下面來來例子。

BOM詳解
BOM詳解

var age=22;
function sayAge()
{
    alert(this.age);
    
}

alert(window.age);  //22
sayAge();     //22
window.sayAge();   //22      

View Code

   我們在全局作用域中定義了一個變量age和一個函數sayAge(),它們被自動歸在了window對象名下。于是,可以通過window.age通路變量age.可以通過window.sayAge()通路函數sayAge().由于sayAge()存在于全局作用域中,是以this.age被映射到window.age,最終顯示的仍然是正确的結果。

   抛開全局變量會成為window對象的屬性不談,定義全局變量與在WINDOW對象上直接定義屬性還是有點差别:全局變量不能通過delete操作符删除,而直接在window對象上定義的可以。

例如:

BOM詳解
BOM詳解
var age=44;
window.color="red";

delete window.age;

delete.window.color;

alert(window.age); //44

alert(window.color); //undefined      

   剛才使用var語句添加的window屬性有一個名為[[configurable]]的特性,這個特性的值被設定為false,是以這樣定義的屬性不可以通過delete操作符删除。IE8以及更早版本在遇到使用delete删除window屬性的語句時,不管該屬性是如何建立的,都會抛出錯誤,以示警告。IE9以及更高版本不會抛出錯誤。

  另外,還要記住一件事:嘗試通路未聲明的變量會抛出錯誤,但是通過查詢window對象,可以知道某個可能未聲明的變量是否存在,例如:

//這裡會抛出錯誤,因為oldValue未定義
var newValue=oldValue;

//不會抛出錯誤,這是一次屬性的查詢,newValue的值是undefined
var newValue=window.oldValue;
      

 注意:Window Moblie 平台的IE浏覽器,不允許通過window.prototype=value之類的形式

直接在window對象上建立新的屬性或方法。可是,在全局作用域中聲明的所有變量和函數,照樣會變成WINDOW對象的成員。

BOM詳解

作者:

KMSFan

出處:http://www.cnblogs.com/kmsfan

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

歡迎大家加入KMSFan之家,以及通路我的優酷空間!

繼續閱讀