(
五
).Prototype
(
1.5 rc2)
使用指南之
array.js
$A = Array.from(iterable):
將
iterable
轉(zhuǎn)化為數(shù)組,如果
iterable
定義了
toArray
方法,就調(diào)用這個方法,否則利用
iterable
的
length
屬性進(jìn)行枚舉
,
如果
iterable
沒有
length
屬性的話就返回空數(shù)組
[]
Array
對象除了擴(kuò)展
Enumerable
對象的方法外,另外擴(kuò)展了如下的幾個方法,
注意以下方法除了
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
的增強(qiáng),當(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
對鍵和值進(jìn)行編碼
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),
默認(rèn)
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}
這種形式
,
默認(rèn)情況下不會執(zhí)行返回結(jié)果中的
javascript
,如果你先執(zhí)行,你可以指定
options
中的
evalScripts
為
true
默認(rèn)情況下是替換指定元素的內(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
元素進(jìn)行周期性的更新,使用方法為
new Ajax.PeriodicalUpdater(container, url, options),
參數(shù)跟
Ajax.Updater
差不多,其中
options
可以設(shè)置
frequency(
默認(rèn)為
2)
,
decay
,
decay
指的是當(dāng)請求的內(nèi)容沒有變化的時候,
frequency
需要延長的倍數(shù),默認(rèn)是
1
,例如如果
decay
設(shè)為
2
,
frequency
設(shè)為
3
而內(nèi)容一直沒有變化,則請求的時間依次會變?yōu)?/span>
3,6,12,24
等
start():
開始更新
,
初始化的時候會自動調(diào)用
stop():
停止更新