(
五
).Prototype
(
1.5 rc2)
使用指南之
array.js
$A = Array.from(iterable):
将
iterable
转化为数组,如果
iterable
定义了
toArray
方法,就调用这个方法,否则利用
iterable
的
length
属性进行枚举
,
如果
iterable
没有
length
属性的话就返回空数组
[]
Array
对象除了扩展
Enumerable
对象的方法外,另外扩展了如下的几个方法,
注意以下方法除了
clear
外都不改变原来数组,而是返回一个新数组:
clear():
清除数组,利用
arr.length=0
first():
返回第一个元素
last()
:返回最后一个元素
compact():
去除数组中值为
null
或
undefined
的元素
flatten():
将数组扁平化,例如
[3,4,[6,7]]
变为
[3,4,6,7]
without():
去除指定的元素
,
可以指定多个值
,
例如
[4,56,7,8].without(4,7)
返回
[56
,
8]
indexOf(object):
返回指定的元素在数组中的索引,不包含则返回
-1
reverse(inline)
:
Array
内置函数
reverse
的增强,当
inline
为
true
时,跟内置的
reverse
函数效果一样,改变原数组的值,否则不改变原来的值
reduce():
如果数组只有一个元素,则返回这个元素,否则返回数组本身
uniq():
返回没有重复元素的数组
clone():
返回一个跟数组相同的数组,
Array
中的
toArray
方法覆盖了
Enumerable
中的
toArray
方法,指向了这个方法
inspect():
跟数组的
toString
方法类似,返回对象的字符串表示,例如
[2,3].inspect()
返回
"[2,3]"
(
六
).Prototype
(
1.5 rc2)
使用指南之
hash.js
Hash
对象
(
关联数组
)
是
Prototype
新建的一个对象,要创建一个
Hash
对象可以调用
$H(object)
方法,使用这个方法将生成一个基于
object
对象的
Hash
对象,生成的
Hash
对象将
object
的属性名作为
key
,将
object
的属性值最为键值,因为
javascript
本身的特点
(
对象本身就是关联数组
)
,所以实现
Hash
也很简单,
Prototype
中的
Hash
只是
javascript
的关联数组
(
对象
)
而已
Prototype
中的
Hash
对象继承自
Enumerable
对象,所以也具有
Enumerable
对象的所有属性和方法,另外它具有以下的方法:
keys():
返回
hash
的键值数组
values():
返回值得数组
merge(hash):
合并两个
hash
toQueryString():
跟
string
的
toQueryParams
方法想法,将
hash
转化为一个
querystring,
会调用
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]
的数组看待,但是比这样的数组更节省存储空间,因为
range
对象只是保存
x
和
x+n
而已
要创建一个
Range
对象调用
$R(start, end, exclusive)
函数就可以了,
exclusive
指定是否包含
end
本身,如果没有指定或为
false
则包含
end
,否则不包含
,
你可以利用
Enumerable
中定义的方法来操作
range
对象,
range
对象只是实现了
Enumerable
对象需要的枚举逻辑
_each
和覆盖了
include
方法而已
(
八
).Prototype
(
1.5 rc2)
使用指南之
ajax
Prototype
中的
ajax.js
提供了一个非常好用的
ajax
框架,一般应用中简单的调用以下代码就可以了
new Ajax.Request(
url, {method: “get”,
onSuccess: showFilter,
onFailure: function(request){alert(”Server error!”)},
onException: showError}
);
这个框架中提供了如下的对象和方法等:
Ajax
对象:
只有一个
getTransport
方法,返回一个
XMLHttpRequest
对象,另外有一个
activeRequestCount
属性,反映当前正在处理的
ajax
数量
Ajax.Responders
对象:
继承自
Enumerable
,管理全局
Ajax
的请求,具有如下方法
register(responder)
:注册一个管理
ajax
请求的对象
unregister(responder)
:撤销一个管理
ajax
请求的对象
dispatch(callback, request, transport, json)
:触发注册的处理对象的方法
这个对象一般很少使用,系统中已经使用如下的代码注册了一个处理对象
Ajax.Responders.register({
onCreate: function() {
Ajax.activeRequestCount++;
},
onComplete: function() {
Ajax.activeRequestCount–;
}
});
Ajax.Base
类:
Ajax
的基类
,
只有一个方法
setOptions(options),
默认
request
参数如下,你可以在新建
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)
调用,
options
是一个对象
(
关联数组
),
在
options
中可以指定
method
,
asynchronous
,
contentType
,
encoding
,
parameters
,
postBody
,
username,password
等选项,其中
parameters
可以是字符传或者关联数组象,
另外在
options
中还可以通过
requestHeaders
指定
request heads
,其中
requestHeaders
可以是数组
(
例如
[
”
Connection
”
,
”
Close
”
,
”
aheadkey
”
,
”
aheadvalue
”
])
或一个关联数组;
options
中最重要的选项就是指定
ajax
的回调方法,可以定义
onComplete, onSuccess, onFailure, onException(
执行过程中发生异常调用的方法,主要为
onComplete, onSuccess, onFailure
等回调方法产生的
)
,甚至可以定义
on404,on503
这样的回调方法,它们的参数为
(transport, json),
其中
transport
为请求的
XMLHttpRequest
对象
, json
是
evalJSON
的结果
如果返回的是一个
javascript
文件
(
根据返回的
Content-type
头判断
)
将会执行
evalResponse
方法,另外
Ajax.Request
对象还有一个
evalJSON
方法,取得文件的时候就会执行
这个对象的方法列表如下:
request(url) :
发送请求,
new
的时候就已经调用了,所以一般不需要使用
success():
判断
request
是否成功了
getHeader(name)
:根据
name
得到
request head
evalJSON():
执行
getHeader(
”
X-JSON
”
),
并返回结果
evalResponse():
执行返回的
responseText
并返回
Ajax.Updater
类
:
继承自
Ajax.Request
,只是比
Ajax.Request
增加了更新
html
元素的功能,一般使用方法是
new Ajax.Updater(element, url, options), element
可以是一个元素,也可以是
{success:e1,failure:e2}
这种形式
,
默认情况下不会执行返回结果中的
javascript
,如果你先执行,你可以指定
options
中的
evalScripts
为
true
默认情况下是替换指定元素的内容,如果你希望是添加,可以指定
options
的
insertion
参数
, insertion
是一个
Insertion.Before
、
Insertion.Top
或
Insertion.Bottom
、
Insertion.After(
将在
dom.js
中介绍
)
Ajax.PeriodicalUpdater
类
:
继承自
Ajax.Base
,周期性的更新一个
html
元素的内容,这个类会调用
Ajax.Updater
对
html
元素进行周期性的更新,使用方法为
new Ajax.PeriodicalUpdater(container, url, options),
参数跟
Ajax.Updater
差不多,其中
options
可以设置
frequency(
默认为
2)
,
decay
,
decay
指的是当请求的内容没有变化的时候,
frequency
需要延长的倍数,默认是
1
,例如如果
decay
设为
2
,
frequency
设为
3
而内容一直没有变化,则请求的时间依次会变为
3,6,12,24
等
start():
开始更新
,
初始化的时候会自动调用
stop():
停止更新