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

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












??? 當(dāng)一個(gè)變量前面沒有對象或this來引用時(shí),ECMAScript認(rèn)為該變量是一個(gè)本地的或全局變量,于是在本地和全局中去搜尋該變量,如果最后仍沒有找到,將會在alert中輸出null。