使用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

(0)

相关推荐

  • 基础的prototype.js常用函数及其用法

    prototype.js 常用函数 :   Element.toggle     交替隐藏或显示    Element.toggle(''div1'',''div2'')   Element.hide     隐藏    Element.hide(''div1'',''div2'')   Element.show   显示    Element.show(''div1'',''div2'')   Element.remove     删除    Element.remove(''div1'','

  • prototype.js的Ajax对象

    我想prototype.js里的ajax对象肯定吸引了不少人,大量封装好的ajax逻辑的类,对于我们这些初学者使用ajax有很大的帮助. 以下用一个我的具体使用例子来解释:效果看这里 1. Ajax.Request 你可以这样创建它 复制代码 代码如下: var url = 'http://yoursever/your/your'; var pars = 'id=xxx'; var myAjax = new Ajax.Request(                     url,      

  • prototype 源码中文说明之 prototype.js

    /**   * 定义一个全局对象, 属性 Version 在发布的时候会替换为当前版本号   */  var Prototype = {   Version: '@@VERSION@@'  } /**   * 创建一种类型,注意其属性 create 是一个方法,返回一个构造函数.   * 一般使用如下   * var X = Class.create(); 返回一个类型,类似于 java 的一个Class实例.   * 要使用 X 类型,需继续用 new X()来获取一个实例,如同 java 的

  • prototype.js简单实现ajax功能示例

    本文实例讲述了prototype.js简单实现ajax功能.分享给大家供大家参考,具体如下: 原本不知道prototype.js是一个框架,只当其是一个再普通不过的JS文件.随手拿着用了用,写了一个JSP页面,单纯的用prototype.js来实现AJAX效果.用了之后发现超好用,自己再也不用写那么大一堆代码了,哦耶.言归正传,还是把今天写的那个小代码发上来. 一.JSP部分 这部分的代码,最为关键的是JS部分的改变.没有采用prototype.js的时候,生成一个AJAX效果,起码得有四大段.

  • 使用prototype.js进行异步操作

    首先下载prototype.js这个类包,然后包含在你的<html>页面中 <script src='prototype.js'></script> 创建XMLHttpRequest对象并且异步的跟踪它的进程, 然后解析出响应 然后处理它可能这是ajax的根本意义,它最具威力的地方,但你能出兼容各种不同浏览器的代码,可能会令你痛苦不堪,但幸好救苦救难的prototype.js提供Ajax.Request 类,让你摆脱这些困扰. 假如你有一个应用程序可以通过url htt

  • 类之Prototype.js学习

    Prototype.js作为javascript的成功的开源框架,封装了很多好用的功能,虽然官方没提供什么文档,不过在google上一搜,好多相关的文档,不过在学习使用的过程中还是碰到了一些问题,希望熟悉的朋友能多加指点,对于prototype.js学习我关注这么几点,同时针对每点也讲讲学习的结果和碰到的问题,^_^    1.类的创建      prototype.js已经封装好了,这个很简单. var Person=Class.create(); 这样就创建了一个Person类,这个Pers

  • prototype.js常用函数详解

    函数名  解释  举例  Element.toggle  交替隐藏或显示  Element.toggle(''div1'',''div2'')  Element.hide  隐藏  Element.hide(''div1'',''div2'')  Element.show 显示  Element.show(''div1'',''div2'')  Element.remove  删除  Element.remove(''div1'',''div2'')  Element.getHeight  取得

  • 使用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&q

  • 利用js实现选项卡的特别效果的实例

    复制代码 代码如下: <html><head>    <meta charset="utf-8"/>    <style type="text/css">        *{margin:0;padding:0;border:0}        #main{width:300px;height:300px;background-color:green}        #head{height:50px;backgrou

  • JS面向对象、prototype、call()、apply()

    一. 起因 那天用到prototype.js于是打开看看,才看几行就满头雾水,原因是对js的面向对象不是很熟悉,于是百度+google了一把,最后终于算小有收获,写此纪念一下^_^. prototype.js代码片段 复制代码 代码如下: var Class = { create: function() { return function() { this.initialize.apply(this , arguments); } } } // Class使用方法如下 var A = Class

随机推荐