().Prototype1.5 rc2)使用指南之array.js

$A = Array.from(iterable): iterable轉(zhuǎn)化為數(shù)組,如果iterable定義了toArray方法,就調(diào)用這個(gè)方法,否則利用iterablelength屬性進(jìn)行枚舉, 如果iterable沒(méi)有length屬性的話就返回空數(shù)組[]

Array對(duì)象除了擴(kuò)展Enumerable對(duì)象的方法外,另外擴(kuò)展了如下的幾個(gè)方法,

注意以下方法除了clear外都不改變?cè)瓉?lái)數(shù)組,而是返回一個(gè)新數(shù)組:

clear(): 清除數(shù)組,利用arr.length=0

first(): 返回第一個(gè)元素

last():返回最后一個(gè)元素

compact(): 去除數(shù)組中值為nullundefined的元素

flatten(): 將數(shù)組扁平化,例如[3,4,[6,7]]變?yōu)?/span>[3,4,6,7]

without(): 去除指定的元素, 可以指定多個(gè)值, 例如[4,56,7,8].without(4,7) 返回[568]

indexOf(object): 返回指定的元素在數(shù)組中的索引,不包含則返回-1

reverse(inline)Array內(nèi)置函數(shù)reverse的增強(qiáng),當(dāng)inlinetrue時(shí),跟內(nèi)置的reverse函數(shù)效果一樣,改變?cè)瓟?shù)組的值,否則不改變?cè)瓉?lái)的值

reduce(): 如果數(shù)組只有一個(gè)元素,則返回這個(gè)元素,否則返回?cái)?shù)組本身

uniq(): 返回沒(méi)有重復(fù)元素的數(shù)組

clone(): 返回一個(gè)跟數(shù)組相同的數(shù)組,Array中的toArray方法覆蓋了Enumerable中的toArray方法,指向了這個(gè)方法

inspect(): 跟數(shù)組的toString方法類似,返回對(duì)象的字符串表示,例如[2,3].inspect() 返回 "[2,3]"

().Prototype1.5 rc2)使用指南之hash.js

Hash對(duì)象(關(guān)聯(lián)數(shù)組)Prototype新建的一個(gè)對(duì)象,要?jiǎng)?chuàng)建一個(gè)Hash對(duì)象可以調(diào)用$H(object)方法,使用這個(gè)方法將生成一個(gè)基于 object對(duì)象的Hash對(duì)象,生成的Hash對(duì)象將object的屬性名作為key,將object的屬性值最為鍵值,因?yàn)?/span>javascript本身的特點(diǎn)(對(duì)象本身就是關(guān)聯(lián)數(shù)組) ,所以實(shí)現(xiàn)Hash也很簡(jiǎn)單,Prototype中的Hash只是javascript的關(guān)聯(lián)數(shù)組(對(duì)象)而已

Prototype中的Hash對(duì)象繼承自Enumerable對(duì)象,所以也具有Enumerable對(duì)象的所有屬性和方法,另外它具有以下的方法:

keys(): 返回hash的鍵值數(shù)組

values(): 返回值得數(shù)組

merge(hash): 合并兩個(gè)hash

toQueryString(): stringtoQueryParams方法想法,將hash轉(zhuǎn)化為一個(gè)querystring, 會(huì)調(diào)用encodeURIComponent對(duì)鍵和值進(jìn)行編碼

inspect(): hash的字符串表示

因?yàn)?/span>hash只是javascript的一個(gè)普通的對(duì)象而已,所以添加一個(gè)鍵值對(duì)使用: hash[key]=value就可以了,刪除一個(gè)鍵值對(duì)使用 detele hash[key]就可以了

().Prototype1.5 rc2)使用指南之range.js

Range對(duì)象是一個(gè)繼承自Enumerable"范圍"對(duì)象,你可以把它看成[x,x+1,x+2,x+3……x+n]的數(shù)組看待,但是比這樣的數(shù)組更節(jié)省存儲(chǔ)空間,因?yàn)?/span>range對(duì)象只是保存xx+n而已

要?jiǎng)?chuàng)建一個(gè)Range對(duì)象調(diào)用$R(start, end, exclusive) 函數(shù)就可以了,exclusive指定是否包含end本身,如果沒(méi)有指定或?yàn)?/span>false則包含end,否則不包含,你可以利用Enumerable中定義的方法來(lái)操作range對(duì)象,range對(duì)象只是實(shí)現(xiàn)了Enumerable對(duì)象需要的枚舉邏輯_each和覆蓋了include方法而已

().Prototype1.5 rc2)使用指南之ajax

Prototype中的ajax.js提供了一個(gè)非常好用的ajax框架,一般應(yīng)用中簡(jiǎn)單的調(diào)用以下代碼就可以了

new Ajax.Request(

    url, {method: “get”,

    onSuccess: showFilter,

    onFailure: function(request){alert(”Server error!”)},

    onException: showError}

 );

這個(gè)框架中提供了如下的對(duì)象和方法等:

Ajax對(duì)象:

只有一個(gè)getTransport方法,返回一個(gè)XMLHttpRequest對(duì)象,另外有一個(gè)activeRequestCount屬性,反映當(dāng)前正在處理的ajax數(shù)量

Ajax.Responders對(duì)象:

繼承自Enumerable,管理全局Ajax的請(qǐng)求,具有如下方法

register(responder):注冊(cè)一個(gè)管理ajax請(qǐng)求的對(duì)象

unregister(responder):撤銷一個(gè)管理ajax請(qǐng)求的對(duì)象

dispatch(callback, request, transport, json):觸發(fā)注冊(cè)的處理對(duì)象的方法

這個(gè)對(duì)象一般很少使用,系統(tǒng)中已經(jīng)使用如下的代碼注冊(cè)了一個(gè)處理對(duì)象

Ajax.Responders.register({

 onCreate: function() {

    Ajax.activeRequestCount++;

 },

 onComplete: function() {

    Ajax.activeRequestCount–;

 }

});

Ajax.Base類:

Ajax的基類, 只有一個(gè)方法setOptions(options), 默認(rèn)request參數(shù)如下,你可以在新建Ajax.request時(shí)指定:

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是一個(gè)對(duì)象(關(guān)聯(lián)數(shù)組), options中可以指定methodasynchronouscontentTypeencodingparameters postBodyusername,password等選項(xiàng),其中parameters可以是字符傳或者關(guān)聯(lián)數(shù)組象,

另外在options中還可以通過(guò)requestHeaders指定request heads,其中requestHeaders可以是數(shù)組(例如[Connection,Close,aheadkey,aheadvalue])或一個(gè)關(guān)聯(lián)數(shù)組;

options中最重要的選項(xiàng)就是指定ajax的回調(diào)方法,可以定義onComplete, onSuccess, onFailure, onException(執(zhí)行過(guò)程中發(fā)生異常調(diào)用的方法,主要為onComplete, onSuccess, onFailure等回調(diào)方法產(chǎn)生的),甚至可以定義on404,on503這樣的回調(diào)方法,它們的參數(shù)為(transport, json),其中transport為請(qǐng)求的XMLHttpRequest對(duì)象, jsonevalJSON的結(jié)果

如果返回的是一個(gè)javascript文件(根據(jù)返回的Content-type頭判斷)將會(huì)執(zhí)行evalResponse方法,另外Ajax.Request對(duì)象還有一個(gè)evalJSON方法,取得文件的時(shí)候就會(huì)執(zhí)行

這個(gè)對(duì)象的方法列表如下:

request(url) : 發(fā)送請(qǐng)求,new的時(shí)候就已經(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可以是一個(gè)元素,也可以是{success:e1,failure:e2}這種形式,

默認(rèn)情況下不會(huì)執(zhí)行返回結(jié)果中的javascript,如果你先執(zhí)行,你可以指定options中的evalScriptstrue

默認(rèn)情況下是替換指定元素的內(nèi)容,如果你希望是添加,可以指定optionsinsertion參數(shù), insertion是一個(gè)Insertion.BeforeInsertion.TopInsertion.Bottom Insertion.After(將在dom.js中介紹)

Ajax.PeriodicalUpdater:

繼承自Ajax.Base,周期性的更新一個(gè)html元素的內(nèi)容,這個(gè)類會(huì)調(diào)用Ajax.Updater對(duì)html元素進(jìn)行周期性的更新,使用方法為new Ajax.PeriodicalUpdater(container, url, options), 參數(shù)跟Ajax.Updater差不多,其中options可以設(shè)置frequency(默認(rèn)為2)decaydecay指的是當(dāng)請(qǐng)求的內(nèi)容沒(méi)有變化的時(shí)候,frequency需要延長(zhǎng)的倍數(shù),默認(rèn)是1,例如如果decay設(shè)為2frequency設(shè)為3而內(nèi)容一直沒(méi)有變化,則請(qǐng)求的時(shí)間依次會(huì)變?yōu)?/span> 3,6,12,24

start(): 開(kāi)始更新, 初始化的時(shí)候會(huì)自動(dòng)調(diào)用

stop(): 停止更新



------君臨天下,舍我其誰(shuí)------