`

《仔仔细细分析Ext》 Ext对String类的扩展

阅读更多

原生 String 类:

         一个 length 属性、一个静态方法 String.fromCharCode() 17 个实例方法。(这里的称呼都是方便理解的方式,不是严格意义上 OO 的意思。)

         17 个实例方法简表:

1、  charAt()  

2、  charCodeAt() :返回字符串中指定位置处的字符编码( Unicode 码值)。

3、  concat() :把一个或多个值连接到字符串上

4、  indexOf()

5、  lastIndexOf()  

6、  localeCompare() :用本地化的顺序比较字符串

7、  match(): 用正则表达式进行模式匹配

8、  replace()  

9、  search() :检索字符串中与正则表达式匹配的子串

10、 slice(): 返回字符串的一个子串

11、 split()

12、 substr()

13、 substring()  

14、 toLowerCase()

15、 toString()

16、  toUpperCase()

17、 valueOf()

 

Ext String 的扩展

         Ext.js 中对 String 类扩展了三个静态方法: escape() leftPad() format()

两个实例方法: toggle() trim()

String 类的扩展程序比较简洁,不对废话,仅仅把 Ext 的源码注释和示例翻译一下:


 

Js代码 复制代码
  1. <SPAN style="FONT-SIZE: medium">/**  
  2.  
  3.  * @String类  
  4.  
  5.  * 这些方法是对JavaScript中String类静态方法的扩展  
  6.  
  7.  */  
  8.   
  9. Ext.applyIf(String, {   
  10.   
  11.     /**  
  12.  
  13.      *将传进来的String中的’和\过滤掉  
  14.  
  15.      * @参数 {String} string 需要进行过滤的字符串  
  16.  
  17.      * @返回值 {String} 过滤好的字符串  
  18.  
  19.      * @静态方法  
  20.  
  21.      */  
  22.   
  23.     escape : function(string) {   
  24.   
  25.         return string.replace(/('|\\)/g, "\\$1");   
  26.   
  27.     },   
  28.   
  29.     
  30.   
  31.     /**  
  32.  
  33.      * 用指定的字符填充一个字符串的左侧。对于格式化数字或者日期字符串,这  
  34.  
  35. *一个非常有用的方法。用法示例:  
  36.  
  37.      * <pre><code>  
  38.  
  39. var s = String.leftPad('123', 5, '0');  
  40.  
  41. // s now contains the string: '00123'  
  42.  
  43. </code></pre>  
  44.  
  45.      * @参数1 {String} string 原来的字符串  
  46.  
  47.      * @参数2 {Number} size 返回字符串的总长度  
  48.  
  49.      * @参数3 {String} char (optional) 填充的字符串 (默认用" "填充)  
  50.  
  51.      * @返回值 {String} 填充好的字符串  
  52.  
  53.      * @静态方法  
  54.  
  55.      */  
  56.   
  57.     leftPad : function (val, size, ch) {   
  58.   
  59.         var result = new String(val);   
  60.   
  61.         if(!ch) {   
  62.   
  63.             ch = " ";   
  64.   
  65.         }   
  66.   
  67.         while (result.length < size) {   
  68.   
  69.             result = ch + result;   
  70.   
  71.         }   
  72.   
  73.         return result.toString();   
  74.   
  75.     },   
  76.   
  77.     
  78.   
  79. /*允许你自定义含有占位符的字符串,并且传递任意数量的参数去替代这些占位符。*每一个占位符必须是唯一的,并且以{0}、{1}…这种格式递增。  
  80.  
  81.          *用法示例:  
  82.  
  83.     * <pre><code>  
  84.  
  85. var cls = 'my-class', text = 'Some text';  
  86.  
  87. var s = String.format('&lt;div class="{0}">{1}&lt;/div>', cls, text);  
  88.  
  89. // s now contains the string: '&lt;div class="my-class">Some text&lt;/div>'  
  90.  
  91. </code></pre>  
  92.  
  93.      * @参数1 {String} string 含有占位符,需要格式化的字符串  
  94.  
  95.      * @参数2 {String} value1 替代占位符 {0}的字符串  
  96.  
  97.      * @参数3 {String} value2  替代占位符{1}的字符串,以此类推  
  98.  
  99.      * @返回值 {String} 格式化好的字符串  
  100.  
  101.      * @静态方法  
  102.  
  103.      */  
  104.   
  105.     format : function(format){   
  106.   
  107.         var args = Array.prototype.slice.call(arguments, 1);   
  108.   
  109.         return format.replace(/\{(\d+)\}/g, function(m, i){   
  110.   
  111.             return args[i];   
  112.   
  113.         });   
  114.   
  115.     }   
  116.   
  117. });   
  118.   
  119. /*工具方法,帮助你轻松地在两个字符串之间轮换取值。  
  120.  
  121. *传入的第一个参数值会与当前字符串进行比较,如果它们相等,则把当前字符串赋值*为传入的第二个参数。否则,保持当前值不变。  
  122.  
  123. *注意,该方法会返回一个新的字符串,而不是去改变当前字符串。  
  124.  
  125.  * <pre><code>  
  126.  
  127. // alternate sort directions  
  128.  
  129. sort = sort.toggle('ASC', 'DESC');  
  130.  
  131.    
  132.  
  133. // instead of conditional logic:  
  134.  
  135. sort = (sort == 'ASC' ? 'DESC' : 'ASC');  
  136.  
  137. </code></pre>  
  138.  
  139.  * @参数1 {String} value 需要与当前值进行比较的字符串  
  140.  
  141.  * @参数2 {String} other 如当前字符串与第一个传入的参数相等,赋值给当前字符串的新值。  
  142.  
  143.  * @返回值 {String} 新的字符串  
  144.  
  145.  */  
  146.   
  147. String.prototype.toggle = function(value, other){   
  148.   
  149.     return this == value ? other : value;   
  150.   
  151. };   
  152.   
  153.     
  154.   
  155. /**  
  156.  
  157.  * 去掉字符串两端的空格,保持中间的空格不变。示例:  
  158.  
  159.  * <pre><code>  
  160.  
  161. var s = '  foo bar  ';  
  162.  
  163. alert('-' + s + '-');         //alerts "- foo bar -"  
  164.  
  165. alert('-' + s.trim() + '-');  //alerts "-foo bar-"  
  166.  
  167. </code></pre>  
  168.  
  169.  * @返回值 {String} 去掉两端空格后的字符串  
  170.  
  171.  */  
  172.   
  173. String.prototype.trim = function(){   
  174.   
  175.     var re = /^\s+|\s+$/g;   
  176.   
  177.     return function(){ return this.replace(re, ""); };   
  178.   
  179. }();</SPAN>  
/**

 * @String类

 * 这些方法是对JavaScript中String类静态方法的扩展

 */

Ext.applyIf(String, {

    /**

     *将传进来的String中的’和\过滤掉

     * @参数 {String} string 需要进行过滤的字符串

     * @返回值 {String} 过滤好的字符串

     * @静态方法

     */

    escape : function(string) {

        return string.replace(/('|\\)/g, "\\$1");

    },

 

    /**

     * 用指定的字符填充一个字符串的左侧。对于格式化数字或者日期字符串,这

*一个非常有用的方法。用法示例:

     * <pre><code>

var s = String.leftPad('123', 5, '0');

// s now contains the string: '00123'

</code></pre>

     * @参数1 {String} string 原来的字符串

     * @参数2 {Number} size 返回字符串的总长度

     * @参数3 {String} char (optional) 填充的字符串 (默认用" "填充)

     * @返回值 {String} 填充好的字符串

     * @静态方法

     */

    leftPad : function (val, size, ch) {

        var result = new String(val);

        if(!ch) {

            ch = " ";

        }

        while (result.length < size) {

            result = ch + result;

        }

        return result.toString();

    },

 

/*允许你自定义含有占位符的字符串,并且传递任意数量的参数去替代这些占位符。*每一个占位符必须是唯一的,并且以{0}、{1}…这种格式递增。

         *用法示例:

    * <pre><code>

var cls = 'my-class', text = 'Some text';

var s = String.format('&lt;div class="{0}">{1}&lt;/div>', cls, text);

// s now contains the string: '&lt;div class="my-class">Some text&lt;/div>'

</code></pre>

     * @参数1 {String} string 含有占位符,需要格式化的字符串

     * @参数2 {String} value1 替代占位符 {0}的字符串

     * @参数3 {String} value2  替代占位符{1}的字符串,以此类推

     * @返回值 {String} 格式化好的字符串

     * @静态方法

     */

    format : function(format){

        var args = Array.prototype.slice.call(arguments, 1);

        return format.replace(/\{(\d+)\}/g, function(m, i){

            return args[i];

        });

    }

});

/*工具方法,帮助你轻松地在两个字符串之间轮换取值。

*传入的第一个参数值会与当前字符串进行比较,如果它们相等,则把当前字符串赋值*为传入的第二个参数。否则,保持当前值不变。

*注意,该方法会返回一个新的字符串,而不是去改变当前字符串。

 * <pre><code>

// alternate sort directions

sort = sort.toggle('ASC', 'DESC');

 

// instead of conditional logic:

sort = (sort == 'ASC' ? 'DESC' : 'ASC');

</code></pre>

 * @参数1 {String} value 需要与当前值进行比较的字符串

 * @参数2 {String} other 如当前字符串与第一个传入的参数相等,赋值给当前字符串的新值。

 * @返回值 {String} 新的字符串

 */

String.prototype.toggle = function(value, other){

    return this == value ? other : value;

};

 

/**

 * 去掉字符串两端的空格,保持中间的空格不变。示例:

 * <pre><code>

var s = '  foo bar  ';

alert('-' + s + '-');         //alerts "- foo bar -"

alert('-' + s.trim() + '-');  //alerts "-foo bar-"

</code></pre>

 * @返回值 {String} 去掉两端空格后的字符串

 */

String.prototype.trim = function(){

    var re = /^\s+|\s+$/g;

    return function(){ return this.replace(re, ""); };

}();

 

format() 方法的工作机制:

String 的扩展代码比较清晰,也很好理解,里面这个 format() 方法倒是有点味道,笔者思虑半天没有明白它的机制,知道的高手请指点,万谢!

分享到:
评论

相关推荐

    Java String类为什么是不可变的_动力节点Java学院整理

    Java String类为什么是不可变的_动力节点Java学院整理,动力节点口口相传的Java黄埔军校

    ext-4.2.0-beta

    7. **主题定制**:EXTJS 4.2.0可能扩展了主题支持,让开发者能够更轻松地创建自定义皮肤,满足特定品牌和设计需求。 8. **调试与测试工具**:为了帮助开发者更好地调试和测试EXTJS应用,4.2.0版本可能增强了开发...

    扩展ACL的应用实例及解析.docx

    2. 扩展访问控制列表(Extended ACL):编号为100-199,对源地址、目的地址、源端口、目的端口和协议进行判断,通常放在离源端较近的接口上。 扩展ACL的特点: * 可以对源地址和目的地址进行判断 * 可以对源端口和...

    初中语文文摘生活民间打拐勇士仔仔

    这个故事讲述了民间打拐勇士仔仔的事迹,他是一个退伍的武警战士,致力于打击人口贩卖,尤其是儿童拐卖。仔仔通过网络监控,识别出人贩子的暗语,并与他们周旋,协助警方解救被拐儿童。 1. **网络监控与反拐策略**...

    仔仔学数学源码 C#4

    【仔仔学数学源码 C#4】是一个专门为幼儿园及小学生设计的数学运算软件,旨在帮助孩子们学习和掌握万位数以内的基本算术运算。这个项目采用C#编程语言的第四版本(C#4)编写,展示了如何利用C#的强大功能来创建教育...

    十大常见Java String问题_动力节点Java学院整理

    String类的split()方法使用正则表达式来分割字符串。为了匹配空白字符,可以使用"\s+",但由于Java的字面量转义,实际传入的参数应该是"\\s+"。 6. **substring()方法的工作原理** 在JDK 6中,substring()方法...

    六仔源码带数据库

    2. **结构分析**:分析项目的目录结构和文件组织,了解模块划分和职责分配,这对理解整个系统架构至关重要。 3. **数据库交互**:查看与数据库相关的代码,了解数据的存储和查询方式,可能涉及SQL语句、ORM框架(如...

    GBA图书仔2 0.9版

    5. **兼容性与移植性**:GBA图书仔2 0.9版需要确保生成的电子书能在各种GBA硬件上正常运行,这涉及对不同GBA模拟器和真实硬件的兼容性测试。 6. **性能优化**:为了在低性能的GBA设备上流畅运行,软件需要进行性能...

    快速城市化过程中城市用地扩展驱动力研究

    这三个主要成分都是通过线性回归分析进一步研究的,结果表明城市用地的扩展与城市人口和GDP的增长之间存在高度正相关的关系,而进一步的偏相关分析发现,GDP增长是解释城市用地扩展的更重要因素。这意味着经济增长在...

    利用jieba完成对年报可读性分析所需词典(2个灵格斯词典+会计科目+会计术语+连词词典)

    这里有两份灵格斯词典,它们可以扩展jieba的基础词库,提高对年报中非标准词汇或行业特有词汇的识别率,确保分析的全面性。 会计科目词典包含了会计领域中常见的科目名称,如“应收账款”、“固定资产”等。在分析...

    向仔嵌入式

    3. **文件系统**:选择合适的文件系统对嵌入式设备至关重要,例如JFFS2、YAFFS或ext4,这些文件系统有不同的优点和适用场景。 4. **实时性增强**:对于需要实时响应的嵌入式应用,可以通过RT-PREEMPT补丁或采用实时...

    EF扩展方法BulkInsert(批量添加)

    这些库提供了对EF的扩展,使得我们能够批量插入数据,显著提高性能。 1. **安装扩展库**: 要使用BulkInsert,首先需要通过NuGet包管理器安装对应的扩展库,例如`EntityFramework.BulkInsert`。在Visual Studio中...

    【动力节点】Java视频教程_SSM框架视频教程之Adapter设计模式

    - 符合“开闭原则”,即对扩展开放,对修改关闭。通过引入新的适配器可以轻松地扩展系统功能。 - 增加了类的透明性和复用性,提高了程序的可维护性。 ##### 缺点: - 多重适配会导致系统变得复杂。 - 使用适配器会...

    宝仔视觉空间宝仔视觉空间

    宝仔视觉空间宝仔视觉空间宝仔视觉空间宝仔视觉空间

    农林牧渔类畜牧业行业长白猪领域分析报告(研究报告).pdf

    《农林牧渔类畜牧业行业长白猪领域分析报告》是一份深度研究畜牧业中长白猪养殖业的专业报告,旨在全面解析该领域的现状、发展趋势以及关键数据。报告内容包括但不限于行业概览、市场分析、生产情况、经济效益以及...

    文本分类系统

    包括各个文本的关键词输出,可以控制关键词输出个数,也可以对关键词加入黑名单和白名单。 关于TextClassify文本分类系统的改进: 改进jieba中文分词词典 改进黑名单:增加停用词 改进白名单:增加专业词 在Text...

    ANSYS地震分析.rar

    ANSYS作为一款强大的多物理场仿真软件,提供了丰富的功能来模拟地震对结构的影响,帮助工程师进行地震分析。本文将围绕“ANSYS地震分析.rar”这一综合学习科研包,探讨其包含的反应谱分析、时程分析、人工波生成以及...

    死仔截图附使用说明

    在死仔截图中,`Bitmap`类用于创建一个与屏幕分辨率相同的图像,然后将屏幕内容复制到这个位图对象中。 5. **Rectangle结构**:`Rectangle`结构用于定义一个矩形区域,它是截图的关键部分。在选择截图区域时,需要...

Global site tag (gtag.js) - Google Analytics