使用prototype.js 的時候應(yīng)該特別注意的幾個問題.
更新時間:2007年04月12日 00:00:00 作者:
1. String.prototype.camelize BUG
這個方法用來返回字符串的駱駝寫法。用js 控制元素的 style的時候經(jīng)常使用
比如
var ss="font-color"
ss=ss.camelize() // fontColor
通常情況下 camelize 會工作得很好,但是有一個特列,那就是浮動定位 float
var ss="float"
obj.style[ss.camelize()]="right" // 這將導(dǎo)致一個錯誤。
顯然,作者沒有考慮 float這種特殊情況,正確的寫法是:
ie: obj.style.styleFloat="right"
ff: obj.style.cssFloat="right"
2. String.prototype.inspect BUG
這里 inspect 方法是有Bug的, 作者用replace 方法的時候沒有用正則,導(dǎo)致只能替換掉第一個匹配的字符。
正確的寫法應(yīng)該這樣
inspect: function() {
return "'" + this.replace(/\\/g, '\\\\').replace(/"/g, '\\\"') + "'";
}
3. Array.prototype.all BUG
這個方法檢測是否數(shù)組中所有元素都能夠讓迭代函數(shù)為真。 如果全部能滿足,則返回true,否則返回false
var f=function(x){return x%2==0} //檢查一個數(shù)是否是偶數(shù)
var arr=[2,4,6]
alert (arr.all(f)==true) //顯示 true
但是當(dāng) arr為空的時候,仍然返回 true
var arr=[]
alert(arr.all(f)==true) //顯示true
4. Array.prototype.any BUG
同 all方法,對空數(shù)組仍然返回true
5.Array.prototype.detect 也就是 find方法
這個不是 Bug ,但是不看原代碼很容易讓人誤解,從而出錯。
這個方法查找第一個能滿足 迭代函數(shù) 的元素,最后返回元素的值
誤解一:
var f=function(x){return x%2==0} //檢測是否是偶數(shù)
var arr=[1,3,5,7] //故意定義一個全為奇數(shù)的數(shù)組。
alert(arr.find(f)==false) //false
//很多人誤以為 find 函數(shù)在找不到滿足條件的元素的時候會返回 false ,實際上,它返回的是 "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ù)字元素") //事實上 這個 alert永遠(yuǎn)不會執(zhí)行。
因為 find方法返回的是第一個符合條件的值。 這里返回:0. 所以.....
6. 對hash 對象的處理需要格外小心的地方
var hash={member:1,test:2,ids:3}
alert(hash.member)
alert($H(hash).inspect())
alert($H(hash).toQueryString())
//hash.member實際是存在的 但是.inspect() 和 .toQueryString()卻當(dāng)它不存在
同樣下面這些屬性也會和 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
這個方法用來返回字符串的駱駝寫法。用js 控制元素的 style的時候經(jīng)常使用
比如
var ss="font-color"
ss=ss.camelize() // fontColor
通常情況下 camelize 會工作得很好,但是有一個特列,那就是浮動定位 float
var ss="float"
obj.style[ss.camelize()]="right" // 這將導(dǎo)致一個錯誤。
顯然,作者沒有考慮 float這種特殊情況,正確的寫法是:
ie: obj.style.styleFloat="right"
ff: obj.style.cssFloat="right"
2. String.prototype.inspect BUG
這里 inspect 方法是有Bug的, 作者用replace 方法的時候沒有用正則,導(dǎo)致只能替換掉第一個匹配的字符。
正確的寫法應(yīng)該這樣
inspect: function() {
return "'" + this.replace(/\\/g, '\\\\').replace(/"/g, '\\\"') + "'";
}
3. Array.prototype.all BUG
這個方法檢測是否數(shù)組中所有元素都能夠讓迭代函數(shù)為真。 如果全部能滿足,則返回true,否則返回false
var f=function(x){return x%2==0} //檢查一個數(shù)是否是偶數(shù)
var arr=[2,4,6]
alert (arr.all(f)==true) //顯示 true
但是當(dāng) arr為空的時候,仍然返回 true
var arr=[]
alert(arr.all(f)==true) //顯示true
4. Array.prototype.any BUG
同 all方法,對空數(shù)組仍然返回true
5.Array.prototype.detect 也就是 find方法
這個不是 Bug ,但是不看原代碼很容易讓人誤解,從而出錯。
這個方法查找第一個能滿足 迭代函數(shù) 的元素,最后返回元素的值
誤解一:
var f=function(x){return x%2==0} //檢測是否是偶數(shù)
var arr=[1,3,5,7] //故意定義一個全為奇數(shù)的數(shù)組。
alert(arr.find(f)==false) //false
//很多人誤以為 find 函數(shù)在找不到滿足條件的元素的時候會返回 false ,實際上,它返回的是 "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ù)字元素") //事實上 這個 alert永遠(yuǎn)不會執(zhí)行。
因為 find方法返回的是第一個符合條件的值。 這里返回:0. 所以.....
6. 對hash 對象的處理需要格外小心的地方
var hash={member:1,test:2,ids:3}
alert(hash.member)
alert($H(hash).inspect())
alert($H(hash).toQueryString())
//hash.member實際是存在的 但是.inspect() 和 .toQueryString()卻當(dāng)它不存在
同樣下面這些屬性也會和 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)文章
Prototype Number對象 學(xué)習(xí)
這個對象提供一些操作數(shù)值類型的工具函數(shù)2009-07-07
Prototype 學(xué)習(xí) 工具函數(shù)學(xué)習(xí)($A方法)
Prototype 學(xué)習(xí) 工具函數(shù)學(xué)習(xí)($A使用方法)2009-07-07
Prototype 學(xué)習(xí) Prototype對象
Prototype 學(xué)習(xí) Prototype對象2009-07-07

