Flyingis

          Talking and thinking freely !
          Flying in the world of GIS !
          隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
          數據加載中……

          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。

          ??? 文章待續……

          posted on 2006-06-30 15:20 Flyingis 閱讀(2361) 評論(0)  編輯  收藏 所屬分類: Web 客戶端技術

          主站蜘蛛池模板: 饶阳县| 滨州市| 元阳县| 南城县| 蒙阴县| 库尔勒市| 赤水市| 长武县| 雷山县| 故城县| 武夷山市| 金门县| 宁陵县| 会同县| 石渠县| 望江县| 合肥市| 广西| 大英县| 南岸区| 河间市| 乐业县| 淄博市| 同德县| 常宁市| 云和县| 米易县| 包头市| 张家界市| 行唐县| 镇赉县| 桃江县| 峨眉山市| 大厂| 安仁县| 潜江市| 江津市| 蒙自县| 尼木县| 石棉县| 资阳市|