(五).Prototype(1.5 rc2)使用指南之array.js
$A = Array.from(iterable): 將iterable轉(zhuǎn)化為數(shù)組,如果iterable定義了toArray方法,就調(diào)用這個方法,否則利用iterable的length屬性進行枚舉, 如果iterable沒有length屬性的話就返回空數(shù)組[]
Array對象除了擴展Enumerable對象的方法外,另外擴展了如下的幾個方法,
注意以下方法除了clear外都不改變原來數(shù)組,而是返回一個新數(shù)組:
clear(): 清除數(shù)組,利用arr.length=0
first(): 返回第一個元素
last():返回最后一個元素
compact(): 去除數(shù)組中值為null或undefined的元素
flatten(): 將數(shù)組扁平化,例如[3,4,[6,7]]變?yōu)?/span>[3,4,6,7]
without(): 去除指定的元素, 可以指定多個值, 例如[4,56,7,8].without(4,7) 返回[56,8]
indexOf(object): 返回指定的元素在數(shù)組中的索引,不包含則返回-1
reverse(inline):Array內(nèi)置函數(shù)reverse的增強,當(dāng)inline為true時,跟內(nèi)置的reverse函數(shù)效果一樣,改變原數(shù)組的值,否則不改變原來的值
reduce(): 如果數(shù)組只有一個元素,則返回這個元素,否則返回數(shù)組本身
uniq(): 返回沒有重復(fù)元素的數(shù)組
clone(): 返回一個跟數(shù)組相同的數(shù)組,Array中的toArray方法覆蓋了Enumerable中的toArray方法,指向了這個方法
inspect(): 跟數(shù)組的toString方法類似,返回對象的字符串表示,例如[2,3].inspect() 返回 "[2,3]"
(六).Prototype(1.5 rc2)使用指南之hash.js
Hash對象(關(guān)聯(lián)數(shù)組)是Prototype新建的一個對象,要創(chuàng)建一個Hash對象可以調(diào)用$H(object)方法,使用這個方法將生成一個基于 object對象的Hash對象,生成的Hash對象將object的屬性名作為key,將object的屬性值最為鍵值,因為javascript本身的特點(對象本身就是關(guān)聯(lián)數(shù)組) ,所以實現(xiàn)Hash也很簡單,Prototype中的Hash只是javascript的關(guān)聯(lián)數(shù)組(對象)而已
Prototype中的Hash對象繼承自Enumerable對象,所以也具有Enumerable對象的所有屬性和方法,另外它具有以下的方法:
keys(): 返回hash的鍵值數(shù)組
values(): 返回值得數(shù)組
merge(hash): 合并兩個hash
toQueryString(): 跟string的toQueryParams方法想法,將hash轉(zhuǎn)化為一個querystring, 會調(diào)用encodeURIComponent對鍵和值進行編碼
inspect(): hash的字符串表示
因為hash只是javascript的一個普通的對象而已,所以添加一個鍵值對使用: hash[key]=value就可以了,刪除一個鍵值對使用 detele hash[key]就可以了
(七).Prototype(1.5 rc2)使用指南之range.js
Range對象是一個繼承自Enumerable的"范圍"對象,你可以把它看成[x,x+1,x+2,x+3……x+n]的數(shù)組看待,但是比這樣的數(shù)組更節(jié)省存儲空間,因為range對象只是保存x和x+n而已
要創(chuàng)建一個Range對象調(diào)用$R(start, end, exclusive) 函數(shù)就可以了,exclusive指定是否包含end本身,如果沒有指定或為false則包含end,否則不包含,你可以利用Enumerable中定義的方法來操作range對象,range對象只是實現(xiàn)了Enumerable對象需要的枚舉邏輯_each和覆蓋了include方法而已
(八).Prototype(1.5 rc2)使用指南之ajax
Prototype中的ajax.js提供了一個非常好用的ajax框架,一般應(yīng)用中簡單的調(diào)用以下代碼就可以了
new Ajax.Request(
url, {method: “get”,
onSuccess: showFilter,
onFailure: function(request){alert(”Server error!”)},
onException: showError}
);
這個框架中提供了如下的對象和方法等:
Ajax對象:
只有一個getTransport方法,返回一個XMLHttpRequest對象,另外有一個activeRequestCount屬性,反映當(dāng)前正在處理的ajax數(shù)量
Ajax.Responders對象:
繼承自Enumerable,管理全局Ajax的請求,具有如下方法
register(responder):注冊一個管理ajax請求的對象
unregister(responder):撤銷一個管理ajax請求的對象
dispatch(callback, request, transport, json):觸發(fā)注冊的處理對象的方法
這個對象一般很少使用,系統(tǒng)中已經(jīng)使用如下的代碼注冊了一個處理對象
Ajax.Responders.register({
onCreate: function() {
Ajax.activeRequestCount++;
},
onComplete: function() {
Ajax.activeRequestCount–;
}
});
Ajax.Base類:
Ajax的基類, 只有一個方法setOptions(options), 默認request參數(shù)如下,你可以在新建Ajax.request時指定:
method: 'post’,
asynchronous: true,
contentType: 'application/x-www-form-urlencoded’,
encoding: 'UTF-8′,
Ajax.Request類:
ajax主要的類,繼承自ajax.base類,客戶端使用 new Ajax.Request(url,options) 調(diào)用,options是一個對象(關(guān)聯(lián)數(shù)組), 在options中可以指定method,asynchronous,contentType,encoding,parameters, postBody,username,password等選項,其中parameters可以是字符傳或者關(guān)聯(lián)數(shù)組象,
另外在options中還可以通過requestHeaders指定request heads,其中requestHeaders可以是數(shù)組(例如[”Connection”,”Close”,”aheadkey”,”aheadvalue”])或一個關(guān)聯(lián)數(shù)組;
options中最重要的選項就是指定ajax的回調(diào)方法,可以定義onComplete, onSuccess, onFailure, onException(執(zhí)行過程中發(fā)生異常調(diào)用的方法,主要為onComplete, onSuccess, onFailure等回調(diào)方法產(chǎn)生的),甚至可以定義on404,on503這樣的回調(diào)方法,它們的參數(shù)為(transport, json),其中transport為請求的XMLHttpRequest對象, json是evalJSON的結(jié)果
如果返回的是一個javascript文件(根據(jù)返回的Content-type頭判斷)將會執(zhí)行evalResponse方法,另外Ajax.Request對象還有一個evalJSON方法,取得文件的時候就會執(zhí)行
這個對象的方法列表如下:
request(url) : 發(fā)送請求,new的時候就已經(jīng)調(diào)用了,所以一般不需要使用
success(): 判斷request是否成功了
getHeader(name):根據(jù)name得到request head
evalJSON(): 執(zhí)行getHeader(”X-JSON”),并返回結(jié)果
evalResponse(): 執(zhí)行返回的responseText并返回
Ajax.Updater類:
繼承自Ajax.Request,只是比Ajax.Request增加了更新html元素的功能,一般使用方法是new Ajax.Updater(element, url, options), element可以是一個元素,也可以是{success:e1,failure:e2}這種形式,
默認情況下不會執(zhí)行返回結(jié)果中的javascript,如果你先執(zhí)行,你可以指定options中的evalScripts為true
默認情況下是替換指定元素的內(nèi)容,如果你希望是添加,可以指定options的insertion參數(shù), insertion是一個Insertion.Before、Insertion.Top或Insertion.Bottom、 Insertion.After(將在dom.js中介紹)
Ajax.PeriodicalUpdater類:
繼承自Ajax.Base,周期性的更新一個html元素的內(nèi)容,這個類會調(diào)用Ajax.Updater對html元素進行周期性的更新,使用方法為new Ajax.PeriodicalUpdater(container, url, options), 參數(shù)跟Ajax.Updater差不多,其中options可以設(shè)置frequency(默認為2),decay,decay指的是當(dāng)請求的內(nèi)容沒有變化的時候,frequency需要延長的倍數(shù),默認是1,例如如果decay設(shè)為2,frequency設(shè)為3而內(nèi)容一直沒有變化,則請求的時間依次會變?yōu)?/span> 3,6,12,24等
start(): 開始更新, 初始化的時候會自動調(diào)用
stop(): 停止更新