使用prototype.js 的時(shí)候應(yīng)該特別注意的幾個(gè)問(wèn)題.
更新時(shí)間:2007年04月12日 00:00:00 作者:
1. String.prototype.camelize BUG
這個(gè)方法用來(lái)返回字符串的駱駝寫(xiě)法。用js 控制元素的 style的時(shí)候經(jīng)常使用
比如
var ss="font-color"
ss=ss.camelize() // fontColor
通常情況下 camelize 會(huì)工作得很好,但是有一個(gè)特列,那就是浮動(dòng)定位 float
var ss="float"
obj.style[ss.camelize()]="right" // 這將導(dǎo)致一個(gè)錯(cuò)誤。
顯然,作者沒(méi)有考慮 float這種特殊情況,正確的寫(xiě)法是:
ie: obj.style.styleFloat="right"
ff: obj.style.cssFloat="right"
2. String.prototype.inspect BUG
這里 inspect 方法是有Bug的, 作者用replace 方法的時(shí)候沒(méi)有用正則,導(dǎo)致只能替換掉第一個(gè)匹配的字符。
正確的寫(xiě)法應(yīng)該這樣
inspect: function() {
return "'" + this.replace(/\\/g, '\\\\').replace(/"/g, '\\\"') + "'";
}
3. Array.prototype.all BUG
這個(gè)方法檢測(cè)是否數(shù)組中所有元素都能夠讓迭代函數(shù)為真。 如果全部能滿足,則返回true,否則返回false
var f=function(x){return x%2==0} //檢查一個(gè)數(shù)是否是偶數(shù)
var arr=[2,4,6]
alert (arr.all(f)==true) //顯示 true
但是當(dāng) arr為空的時(shí)候,仍然返回 true
var arr=[]
alert(arr.all(f)==true) //顯示true
4. Array.prototype.any BUG
同 all方法,對(duì)空數(shù)組仍然返回true
5.Array.prototype.detect 也就是 find方法
這個(gè)不是 Bug ,但是不看原代碼很容易讓人誤解,從而出錯(cuò)。
這個(gè)方法查找第一個(gè)能滿足 迭代函數(shù) 的元素,最后返回元素的值
誤解一:
var f=function(x){return x%2==0} //檢測(cè)是否是偶數(shù)
var arr=[1,3,5,7] //故意定義一個(gè)全為奇數(shù)的數(shù)組。
alert(arr.find(f)==false) //false
//很多人誤以為 find 函數(shù)在找不到滿足條件的元素的時(shí)候會(huì)返回 false ,實(shí)際上,它返回的是 "undefined"
誤解二:
尋找數(shù)組中的數(shù)字元素
var f=function(x){return !isNaN(x) && typeof(x)==="number"}
var arr=[false,"go_rush",0,"阿舜"]
if (arr.find(f)) alert("數(shù)組中含有數(shù)字元素") //事實(shí)上 這個(gè) alert永遠(yuǎn)不會(huì)執(zhí)行。
因?yàn)?nbsp;find方法返回的是第一個(gè)符合條件的值。 這里返回:0. 所以.....
6. 對(duì)hash 對(duì)象的處理需要格外小心的地方
var hash={member:1,test:2,ids:3}
alert(hash.member)
alert($H(hash).inspect())
alert($H(hash).toQueryString())
//hash.member實(shí)際是存在的 但是.inspect() 和 .toQueryString()卻當(dāng)它不存在
同樣下面這些屬性也會(huì)和 prototype.js 相沖突。
each, all, any, collect, detect, findAll, grep, include, inject, invoke, max, min,
partition, pluck, reject, sortBy, toArray, zip, inspect, map, find, select, member, entries
這個(gè)方法用來(lái)返回字符串的駱駝寫(xiě)法。用js 控制元素的 style的時(shí)候經(jīng)常使用
比如
var ss="font-color"
ss=ss.camelize() // fontColor
通常情況下 camelize 會(huì)工作得很好,但是有一個(gè)特列,那就是浮動(dòng)定位 float
var ss="float"
obj.style[ss.camelize()]="right" // 這將導(dǎo)致一個(gè)錯(cuò)誤。
顯然,作者沒(méi)有考慮 float這種特殊情況,正確的寫(xiě)法是:
ie: obj.style.styleFloat="right"
ff: obj.style.cssFloat="right"
2. String.prototype.inspect BUG
這里 inspect 方法是有Bug的, 作者用replace 方法的時(shí)候沒(méi)有用正則,導(dǎo)致只能替換掉第一個(gè)匹配的字符。
正確的寫(xiě)法應(yīng)該這樣
inspect: function() {
return "'" + this.replace(/\\/g, '\\\\').replace(/"/g, '\\\"') + "'";
}
3. Array.prototype.all BUG
這個(gè)方法檢測(cè)是否數(shù)組中所有元素都能夠讓迭代函數(shù)為真。 如果全部能滿足,則返回true,否則返回false
var f=function(x){return x%2==0} //檢查一個(gè)數(shù)是否是偶數(shù)
var arr=[2,4,6]
alert (arr.all(f)==true) //顯示 true
但是當(dāng) arr為空的時(shí)候,仍然返回 true
var arr=[]
alert(arr.all(f)==true) //顯示true
4. Array.prototype.any BUG
同 all方法,對(duì)空數(shù)組仍然返回true
5.Array.prototype.detect 也就是 find方法
這個(gè)不是 Bug ,但是不看原代碼很容易讓人誤解,從而出錯(cuò)。
這個(gè)方法查找第一個(gè)能滿足 迭代函數(shù) 的元素,最后返回元素的值
誤解一:
var f=function(x){return x%2==0} //檢測(cè)是否是偶數(shù)
var arr=[1,3,5,7] //故意定義一個(gè)全為奇數(shù)的數(shù)組。
alert(arr.find(f)==false) //false
//很多人誤以為 find 函數(shù)在找不到滿足條件的元素的時(shí)候會(huì)返回 false ,實(shí)際上,它返回的是 "undefined"
誤解二:
尋找數(shù)組中的數(shù)字元素
var f=function(x){return !isNaN(x) && typeof(x)==="number"}
var arr=[false,"go_rush",0,"阿舜"]
if (arr.find(f)) alert("數(shù)組中含有數(shù)字元素") //事實(shí)上 這個(gè) alert永遠(yuǎn)不會(huì)執(zhí)行。
因?yàn)?nbsp;find方法返回的是第一個(gè)符合條件的值。 這里返回:0. 所以.....
6. 對(duì)hash 對(duì)象的處理需要格外小心的地方
var hash={member:1,test:2,ids:3}
alert(hash.member)
alert($H(hash).inspect())
alert($H(hash).toQueryString())
//hash.member實(shí)際是存在的 但是.inspect() 和 .toQueryString()卻當(dāng)它不存在
同樣下面這些屬性也會(huì)和 prototype.js 相沖突。
each, all, any, collect, detect, findAll, grep, include, inject, invoke, max, min,
partition, pluck, reject, sortBy, toArray, zip, inspect, map, find, select, member, entries
相關(guān)文章
滾動(dòng)經(jīng)典最新話題[prototype框架]下編寫(xiě)
滾動(dòng)經(jīng)典最新話題[prototype框架]下編寫(xiě)...2006-10-10初學(xué)prototype,發(fā)個(gè)JS接受URL參數(shù)的代碼
初學(xué)prototype,發(fā)個(gè)JS接受URL參數(shù)的代碼...2006-09-09Prototype RegExp對(duì)象 學(xué)習(xí)
幫助文檔上沒(méi)有這個(gè)對(duì)象,實(shí)際上源代碼中這個(gè)對(duì)象還是有方法的,就1靜態(tài)方法,作用也不是很大,這里簡(jiǎn)單說(shuō)一下,因?yàn)橐院蠼榻B別的對(duì)象時(shí)會(huì)用到這個(gè)RegExp2009-07-07Prototype Template對(duì)象 學(xué)習(xí)
這里的Template對(duì)象其實(shí)就是格式化字符串的工具,就像java中的String.format方法。這個(gè)對(duì)象只提供一個(gè)方法evaluate。2009-07-07Prototype Hash對(duì)象 學(xué)習(xí)
這個(gè)對(duì)象相當(dāng)于Java中的HashMap,當(dāng)然了功能沒(méi)HashMap那么強(qiáng)大。提供一直基本的方法,簡(jiǎn)單的方法就不在源碼中注釋了。2009-07-07Prototype PeriodicalExecuter對(duì)象 學(xué)習(xí)
這個(gè)對(duì)象就是可以周期性的執(zhí)行某個(gè)方法,但是在它內(nèi)部維持了一個(gè)狀態(tài),可以防止由于某些原因一次調(diào)用沒(méi)執(zhí)行,然后下一次調(diào)用又來(lái)了,這樣會(huì)造成連續(xù)執(zhí)行兩次方法。上面的第二斷英文就是這個(gè)意思。2009-07-07