当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 使用prototype.js 的时候应该特别注意的几个问题.

Javascript
javascript实现的动态添加表单元素input,button等(appendChild)
javascript动态添加单元格的脚本代码
[原创]仿google adsense颜色选择器代码,从中易广告联盟程序提取
asp javascript 实现关闭窗口时保存数据的办法
javascript 下拉框显示当前日期
惊云JS随机排序程序随机显示信息-每次新闻显示顺序都不一样
javascript下有关dom以及xml节点访问兼容问题
js 复制功能 支持 for IE/FireFox/mozilla/ns
css图片自适应大小
比较简单的一个符合web标准的JS调用flash方法
javascript数组组合成字符串的脚本
XRegExp 0.2: Now With Named Capture
jQuery 研究心得 取得属性的值
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
Prototype1.6 JS 官方下载地址
jquery 指南/入门基础
jquery api参考 visualjquery 中国线路 速度快
js控制fieldset高度的代码
document.documentElement && document.documentElement.scrollTop
js同时按下两个方向键

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 326 ::
收藏到网摘: n/a

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