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

  1. String.prototype.camelize    BUG

  这个方法用来返回字符串的骆驼写法。用js 控制元素的 style的时候经常使用

  比如

  var ss="font-color"

  ss=ss.camelize()    // fontColor

  通常情况下 camelize 会工作得很好,但是有一个特列,那就是浮动定位  float

  var ss="float"

  obj.style[ss.camelize()]="right" // 这将导致一个错误。

  显然,作者没有考虑 float这种特殊情况,正确的写法是:

  ie:   obj.style.styleFloat="right"

  ff:   obj.style.cssFloat="right"

  2. String.prototype.inspect   BUG

  这里 inspect 方法是有Bug的, 作者用replace 方法的时候没有用正则,导致只能替换掉第一个匹配的字符。

  正确的写法应该这样

  inspect: function() {

  return "'" + this.replace(/\\/g, '\\\\').replace(/"/g, '\\\"') + "'";

  }

  3. Array.prototype.all   BUG

  这个方法检测是否数组中所有元素都能够让迭代函数为真。 如果全部能满足,则返回true,否则返回false

  var f=function(x){return x%2==0}  //检查一个数是否是偶数

  var arr=[2,4,6]

  alert (arr.all(f)==true)   //显示 true

  但是当  arr为空的时候,仍然返回 true

  var arr=[]

  alert(arr.all(f)==true)   //显示true

  4.  Array.prototype.any  BUG

  同 all方法,对空数组仍然返回true

  5.Array.prototype.detect  也就是 find方法

  这个不是 Bug ,但是不看原代码很容易让人误解,从而出错。

  这个方法查找第一个能满足 迭代函数 的元素,最后返回元素的值

  误解一:

  var f=function(x){return x%2==0}  //检测是否是偶数

  var arr=[1,3,5,7]    //故意定义一个全为奇数的数组。

  alert(arr.find(f)==false)   //false

  //很多人误以为 find 函数在找不到满足条件的元素的时候会返回 false ,实际上,它返回的是 "undefined"

  误解二:

  寻找数组中的数字元素

  var f=function(x){return !isNaN(x) && typeof(x)==="number"}

  var arr=[false,"go_rush",0,"阿舜"]

  if (arr.find(f)) alert("数组中含有数字元素")     //事实上 这个 alert永远不会执行。

  因为 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()却当它不存在

  同样下面这些属性也会和 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