JavaScript 中的對象(上)
??? 作者:Flyingis
??? 面向對象語言需要具備三種基本特征:繼承(Inheritance)、多態 (Polymorphism) 、封裝(Encapsulation and Aggregation)。和Java 、C++ 等語言一樣,ECMAScript 被認為是面向對象的,因為它同時支持這些特征。
?
var?obj?=?new?Object();
??? 該語句創建了一個對象,當構造函數沒有參數時,可以省略后面的括號。我們通常是通過對象的引用來進行對象操作,當一個對象的引用為null時,ECMAScript將啟動垃圾回收程序刪除該對象,釋放內存。當一個對象存在多個引用時,需要將所有的引用設置為null來釋放該對象所占用的空間。
1? 早期綁定和動態綁定
??? 早期綁定是指在對象被實例化之前對象的屬性和方法已經被定義,使得編譯器或解釋器能夠提前編譯機器碼。Java和VB支持這種特性,但ECMAScript 并非強類型,不支持早期綁定。
??? 動態綁定是指編譯器或解釋器在運行時才知道該對象的具體類型,之前并不會檢查,只會判斷這些屬性和方法是否得到該對象的支持。ECMAScript對所有的變量使用動態綁定。
2? 對象類型
2.1? 原始對象
??? ECMA-262 定義不受主機環境影響的ECMAScript支持的任意對象為原始對象,簡而言之,原始對象就是ECMA-262定義的引用類型,比較常用的有Object、Function、String、Boolean、Number、Array、Date。?
??? Array
??? Array有許多常用的方法,很多和Java類似,在此不作介紹。需要注意的是,使用push()和pop()兩個方法,可以將Array看作一個棧,遵循后進先出規則(LIFO)。使用shift()和push()兩個方法,Array對象即可看作是一個隊列,遵循后進后出的規則(LILO)。splice()方法非常有用,它輕松的實現了鏈表的一些基本功能,如刪除數據項、插入數據、替換數據。
??? Date
??? ECMAScript中的Date類是基于Java早期版本中的java.util.Date類的,它可以精確表示1970年1月1日(格林威治時間)前后285616年的任意時間。Date是少有的幾個重寫了toString()和valueOf()方法,并且兩個方法并不相同的類。valueOf()通常表示精確到毫秒級的時間,toString()通常返回個性化的時間表示方法,例如相同的時間在不同瀏覽器下顯示的效果可能不一樣。
2.2? Build-in對象
??? Build-in 對象除了具備原始對象的基本特性外,它在 ECMAScript 程序開始運行時就可以使用,因此可以說任何 Build-in 對象就是原始對象。目前 ECMA-262 只定義了兩個 Build-in 對象: Global 和 Math 。
??? Global
??? 在ECMAScript里,沒有函數可以單獨存在,所有的函數都必須是某個對象的方法。如isNan()、isFinite()、parseInt()、parseFloat()、encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent() 等均是Global對象的方法,除此之外,Global對象還包括一些屬性。
??? Math
??? Math中有許多屬性和方法可以用于數學計算,和Java中的比較類似。
2.3? Host 對象
??? 除了原始對象和Build-in對象外,其他對象均是Host對象。所有的BOM和DOM對象均被認為是Host對象。
3? 類成員的訪問方式
??? 在面向對象語言程序設計中,常見的類成員訪問方式有public、protected和private。在ECMAScript中,只有public一種訪問方式,對象中所有的屬性和方法都是可見的,因此,在程序設計時需要額外注意系統安全性的問題。在沒有合理的程序規范之前,程序員在編寫ECMAScript代碼時,通常使用一定規范的命名方式來說明該屬性或方法是私有的(僅僅是說明而已,實際上還是公有的),例如在名稱前后加上下劃線,或只在名稱前加下劃線。另外,在ECMAScript中沒有static方法。
4? this關鍵字
??? this關鍵字是ECMAScript中一個非常重要的概念,通常在對象的方法中使用。
function?whatFruit()?{
??alert(this.color);
}

var?table1?=?new?Object;
table1.fruit?=?"apple";
table1.whatFruit?=?whatFruit;
var?table2?=?new?Object;
table2.fruit?=?"pear";
table2.whatFruit?=?whatFruit;
table1.whatFruit();??//輸出apple
table2.whatFruit();??//輸出pear
??? 當一個變量前面沒有對象或this來引用時,ECMAScript認為該變量是一個本地的或全局變量,于是在本地和全局中去搜尋該變量,如果最后仍沒有找到,將會在alert中輸出null。
??? 文章待續……
??? 面向對象語言需要具備三種基本特征:繼承(Inheritance)、多態 (Polymorphism) 、封裝(Encapsulation and Aggregation)。和Java 、C++ 等語言一樣,ECMAScript 被認為是面向對象的,因為它同時支持這些特征。
?

??? 該語句創建了一個對象,當構造函數沒有參數時,可以省略后面的括號。我們通常是通過對象的引用來進行對象操作,當一個對象的引用為null時,ECMAScript將啟動垃圾回收程序刪除該對象,釋放內存。當一個對象存在多個引用時,需要將所有的引用設置為null來釋放該對象所占用的空間。
1? 早期綁定和動態綁定
??? 早期綁定是指在對象被實例化之前對象的屬性和方法已經被定義,使得編譯器或解釋器能夠提前編譯機器碼。Java和VB支持這種特性,但ECMAScript 并非強類型,不支持早期綁定。
??? 動態綁定是指編譯器或解釋器在運行時才知道該對象的具體類型,之前并不會檢查,只會判斷這些屬性和方法是否得到該對象的支持。ECMAScript對所有的變量使用動態綁定。
2? 對象類型
2.1? 原始對象
??? ECMA-262 定義不受主機環境影響的ECMAScript支持的任意對象為原始對象,簡而言之,原始對象就是ECMA-262定義的引用類型,比較常用的有Object、Function、String、Boolean、Number、Array、Date。?
??? Array
??? Array有許多常用的方法,很多和Java類似,在此不作介紹。需要注意的是,使用push()和pop()兩個方法,可以將Array看作一個棧,遵循后進先出規則(LIFO)。使用shift()和push()兩個方法,Array對象即可看作是一個隊列,遵循后進后出的規則(LILO)。splice()方法非常有用,它輕松的實現了鏈表的一些基本功能,如刪除數據項、插入數據、替換數據。
??? Date
??? ECMAScript中的Date類是基于Java早期版本中的java.util.Date類的,它可以精確表示1970年1月1日(格林威治時間)前后285616年的任意時間。Date是少有的幾個重寫了toString()和valueOf()方法,并且兩個方法并不相同的類。valueOf()通常表示精確到毫秒級的時間,toString()通常返回個性化的時間表示方法,例如相同的時間在不同瀏覽器下顯示的效果可能不一樣。
2.2? Build-in對象
??? Build-in 對象除了具備原始對象的基本特性外,它在 ECMAScript 程序開始運行時就可以使用,因此可以說任何 Build-in 對象就是原始對象。目前 ECMA-262 只定義了兩個 Build-in 對象: Global 和 Math 。
??? Global
??? 在ECMAScript里,沒有函數可以單獨存在,所有的函數都必須是某個對象的方法。如isNan()、isFinite()、parseInt()、parseFloat()、encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent() 等均是Global對象的方法,除此之外,Global對象還包括一些屬性。
??? Math
??? Math中有許多屬性和方法可以用于數學計算,和Java中的比較類似。
2.3? Host 對象
??? 除了原始對象和Build-in對象外,其他對象均是Host對象。所有的BOM和DOM對象均被認為是Host對象。
3? 類成員的訪問方式
??? 在面向對象語言程序設計中,常見的類成員訪問方式有public、protected和private。在ECMAScript中,只有public一種訪問方式,對象中所有的屬性和方法都是可見的,因此,在程序設計時需要額外注意系統安全性的問題。在沒有合理的程序規范之前,程序員在編寫ECMAScript代碼時,通常使用一定規范的命名方式來說明該屬性或方法是私有的(僅僅是說明而已,實際上還是公有的),例如在名稱前后加上下劃線,或只在名稱前加下劃線。另外,在ECMAScript中沒有static方法。
4? this關鍵字
??? this關鍵字是ECMAScript中一個非常重要的概念,通常在對象的方法中使用。












??? 當一個變量前面沒有對象或this來引用時,ECMAScript認為該變量是一個本地的或全局變量,于是在本地和全局中去搜尋該變量,如果最后仍沒有找到,將會在alert中輸出null。
??? 文章待續……
posted on 2006-06-30 15:20 Flyingis 閱讀(2361) 評論(0) 編輯 收藏 所屬分類: Web 客戶端技術