jasmine214--love

          只有當(dāng)你的內(nèi)心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強(qiáng)壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          Javascript---Hash類詳解

          Posted on 2010-07-19 13:55 幻海藍(lán)夢 閱讀(5990) 評論(0)  編輯  收藏 所屬分類: JS

          原文:http://www.phpfans.net/manu/Prototype/prototype/api/hash.htm

          Hash

          Hash 可以看作是一個 關(guān)聯(lián)數(shù)組,它對每一個值都綁定了一個唯一的鍵(值并不必須是唯一的), 然而,它不能保證迭代時元素的順序始終一致。因為 JavaScript 程序語言的特性,每個對象實際上都是一個 hash,但是,本篇所述的 Hash 增加了許多方法,讓你能夠輕松地枚舉鍵和值、迭代“鍵/值”對、 合并兩個 hash、將 hash 編碼成為一個查詢字符串等等。

          創(chuàng)建一個 hash

          構(gòu)造一個 Hash 實例有兩種方法:第一種是使用 new 關(guān)鍵字實例化一個 JavaScript 對象(new Hash(obj))。第二種是使用 $H 函數(shù)。傳遞一個 JavaScript 對象或是一個 Hash 給 $H$H 函數(shù)會克隆它們,并不會對原始對象造成任何影響。

          對于上述兩種構(gòu)造方法,你也可以不傳遞任何參數(shù)而調(diào)用它們。它們將返回一個空的 hash。

          在 Prototype 1.6 中的后向兼容性變更

          后向兼容性變更 - 雖然新版本的 Hash 與之前的版本具有相同的目標(biāo),但是新版本的 Hash 不再兼容先前版本的 Hash 類型。

          現(xiàn)在,不能再通過 Hash 實例的屬性來訪問“鍵/值”對,它們是私有的,這是為了防止在 Hash 實例上定義的屬性和混入的方法引起鍵的沖突。這意味著你必須使用 Hash#get(key)Hash#set(key, value)Hash#unset(key) 實例方法來訪問、設(shè)置或刪除“鍵/值”對。例如:

          						var myhash = new Hash(); 
          // 老的 API --> 新的 API
          myhash.name = "Bob"; --> myhash.set('name', 'Bob');
          myhash.name; --> myhash.get('name');
          delete myhash.name; --> myhash.unset('name');

          你也應(yīng)該了解關(guān)于 Hash API 的其它變更:

          • $H(object) 快捷方法現(xiàn)在完全等同于 new Hash(object)。無論參數(shù)是一個對象還是另一個 Hash,它們都返回一個新的對象。
          • Hash#merge 返回一個新的 Hash,而不再是對調(diào)用該方法的實例對象進(jìn)行修改。
          • Hash#updateHash#merge 的一個破壞性版本,它會修改調(diào)用該方法的實例對象。
          • Hash#clone 返回一個新的當(dāng)前 Hash 對象的克隆實例。
          • Hash#toObject 返回一個當(dāng)前 Hash 內(nèi)部對象的復(fù)本。
            譯注:Prototype 使用了一個單獨(dú)的內(nèi)部對象來存儲“鍵/值”對。
          • Hash.toQueryString 現(xiàn)在是 Object.toQueryString 的一個別名。(Hash.toQueryString 已不推薦使用,在將來的 Prototype 版本中,這個方法將會被移除。)
          • Hash#remove 已經(jīng)被 Hash#unset 取代。
          • Hash.toJSON 已經(jīng)被 Object.toJSONHash#toJSON 實例方法取代。

          注意,對于 Prototype 的早期版本(< 1.6)

          傳遞一個 hash 到 $H 并不會克隆它。

          因為混入了 Enumerable,同時,它還有自己的方法,所以 Hash 不是所有的名稱都可以用作“鍵”的。如果新增的鍵的名稱與 Hash 的任何一個方法同名,則那個方法不能再被調(diào)用。 即使因為你不需要調(diào)用那個方法而僥幸獲得成功,但仍然會有問題:

          						var h = new Hash({ ... }); 
          h['each'] = 'my own stuff';
          h.map();
          // -> 錯誤,因為 'each' 不再是一個函數(shù)

          Enumerable 中,最重要的方法是 each, 因為幾乎每一個其它的方法都需要它——覆蓋它將導(dǎo)致我們的 hash 實例成為一個廢物。你也不能抱著僥幸心理使用 _each,因為它也是 Enumerable 內(nèi)部的一個重要方法。

          方法

          clone
          1.6

          										clone() -> newHash
          								

          返回一個 hash 的克隆。

          each

          										each(iterator) -> Hash
          								

          迭代處理 hash 中的“鍵/值”對。

          get
          1.6

          										get(key) -> value
          								

          返回 hash 指定鍵對應(yīng)的值。

          inspect

          										inspect() -> String
          								

          返回 hash 針對調(diào)試的字符串表現(xiàn)形式。

          keys

          										keys() -> [String...]
          								

          返回一個數(shù)組,該數(shù)組包括 hash 中所有的鍵的名稱。

          merge
          1.6 改進(jìn)

          										merge(object) -> newHash
          								

          object 和當(dāng)前的 hash 實例合并,返回合并后的結(jié)果。在 v1.6.0 之前: 這是一個破壞性的方法(對象的值將會被增加到當(dāng)前 hash 中)。從 v1.6.0 開始: 這不再是一個破壞性的方法(在合并之前,hash 已被克隆)。

          remove
          不推薦

          										remove(key) -> value
          remove(key1, key2...) -> Array

          從 hash 中移除指定的鍵,并返回被移除的鍵對應(yīng)的值。從 v1.6.0 開始,該方法不可用

          set
          1.6

          										set(key, value) -> value
          								

          將 hash 中 key 指定的鍵的值設(shè)置為 value,返回所設(shè)置的值(value)。 譯注:如果不存在指定的鍵,則新增。

          toJSON
          1.5.1

          										toJSON() -> String
          								

          返回一個 JSON 字符串。

          toObject
          1.6

          										toObject() -> Object
          								

          克隆 hash 內(nèi)部的 Object 并返回。譯注:Hash 在內(nèi)部使用一個單獨(dú)的 Object 保存“鍵/值”對。

          toQueryString
          1.6 改進(jìn)

          										toQueryString() -> String
          								

          將一個 hash 轉(zhuǎn)換為 URL 編碼字符串形式。

          unset
          1.6

          										unset(key) -> value
          								

          刪除 hash 中的鍵,并返回鍵對應(yīng)的值。

          update
          1.6

          										update(object) -> Hash
          								

          使用參數(shù) object 包含的“鍵/值”對更新當(dāng)前 hash。原始的 hash 對象將會被修改。

          values

          										values() -> Array
          								

          返回一個數(shù)組,該數(shù)組是 hash 中所有的值的集合。

          主站蜘蛛池模板: 罗定市| 福贡县| 津南区| 增城市| 修文县| 眉山市| 安丘市| 大关县| 柳河县| 永兴县| 门头沟区| 南通市| 老河口市| 三亚市| 南宁市| 潮州市| 永平县| 西林县| 衡山县| 双辽市| 屏东县| 沐川县| 靖安县| 天气| 肇庆市| 金门县| 青海省| 平顶山市| 永嘉县| 正安县| 成安县| 南华县| 武清区| 宁波市| 龙州县| 东方市| 清镇市| 弥勒县| 阿坝县| 盐亭县| 巴东县|