使用prototype.js 的时候应该特别注意的几个问题.

时间:2021-05-25

1.String.prototype.camelizeBUG
这个方法用来返回字符串的骆驼写法。用js控制元素的style的时候经常使用
比如
varss="font-color"
ss=ss.camelize()//fontColor
通常情况下camelize会工作得很好,但是有一个特列,那就是浮动定位float
varss="float"
obj.style[ss.camelize()]="right"//这将导致一个错误。
显然,作者没有考虑float这种特殊情况,正确的写法是:
ie:obj.style.styleFloat="right"
ff:obj.style.cssFloat="right"
2.String.prototype.inspectBUG
这里inspect方法是有Bug的,作者用replace方法的时候没有用正则,导致只能替换掉第一个匹配的字符。
正确的写法应该这样
inspect:function(){
return"'"+this.replace(/\\/g,'\\\\').replace(/"/g,'\\\"')+"'";
}
3.Array.prototype.allBUG
这个方法检测是否数组中所有元素都能够让迭代函数为真。如果全部能满足,则返回true,否则返回false
varf=function(x){returnx%2==0}//检查一个数是否是偶数
vararr=[2,4,6]
alert(arr.all(f)==true)//显示true
但是当arr为空的时候,仍然返回true
vararr=[]
alert(arr.all(f)==true)//显示true
4.Array.prototype.anyBUG
同all方法,对空数组仍然返回true
5.Array.prototype.detect也就是find方法
这个不是Bug,但是不看原代码很容易让人误解,从而出错。
这个方法查找第一个能满足迭代函数的元素,最后返回元素的值
误解一:
varf=function(x){returnx%2==0}//检测是否是偶数
vararr=[1,3,5,7]//故意定义一个全为奇数的数组。
alert(arr.find(f)==false)//false
//很多人误以为find函数在找不到满足条件的元素的时候会返回false,实际上,它返回的是"undefined"
误解二:
寻找数组中的数字元素
varf=function(x){return!isNaN(x)&&typeof(x)==="number"}
vararr=[false,"go_rush",0,"阿舜"]
if(arr.find(f))alert("数组中含有数字元素")//事实上这个alert永远不会执行。
因为find方法返回的是第一个符合条件的值。这里返回:0.所以.....

6.对hash对象的处理需要格外小心的地方
varhash={member:1,test:2,ids:3}
alert(hash.member)
alert($H(hash).inspect())
alert($H(hash).toQueryString())
//hash.member实际是存在的但是.inspect()和.toQueryString()却当它不存在
同样下面这些属性也会和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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章