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


Posted in Javascript onApril 12, 2007

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

Javascript 相关文章推荐
JS判断当前日期是否大于某个日期的实现代码
Sep 02 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
Dec 24 Javascript
jquery next nextAll nextUntil siblings的区别介绍
Oct 05 Javascript
JavaScript获取并更改input标签name属性的方法
Jul 02 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
Jan 12 Javascript
Node.js Streams文件读写操作详解
Jul 04 Javascript
微信小程序的日期选择器的实例详解
Sep 29 Javascript
详解ES6 Symbol 的用途
Oct 14 Javascript
vue之debounce属性被移除及处理详解
Nov 13 Javascript
vue+canvas实现移动端手写签名
May 21 Javascript
js实现简单五子棋游戏
May 28 Javascript
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
Apr 12 #Javascript
ie 处理 gif动画 的onload 事件的一个 bug
Apr 12 #Javascript
无语,javascript居然支持中文(unicode)编程!
Apr 12 #Javascript
几个高效,简洁的字符处理函数
Apr 12 #Javascript
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
Apr 12 #Javascript
身份证号码前六位所代表的省,市,区, 以及地区编码下载
Apr 12 #Javascript
对google个性主页的拖拽效果的js的完整注释[转]
Apr 10 #Javascript
You might like
PHP新手上路(二)
2006/10/09 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
2020/07/24 Javascript
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
flask框架路由常用定义方式总结
2019/07/23 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
税务会计岗位职责
2014/02/18 职场文书
竞选班长自荐书范文
2014/03/09 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
美丽的大脚观后感
2015/06/03 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android