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

2024-01-09 14:10

本文主要是介绍《仔仔细细分析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 directionssort = 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() 方法倒是有点味道,笔者思虑半天没有明白它的机制,知道的高手请指点,万谢!

这篇关于《仔仔细细分析Ext》 Ext对String类的扩展的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587388

相关文章

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

java String.join()方法实例详解

《javaString.join()方法实例详解》String.join()是Java提供的一个实用方法,用于将多个字符串按照指定的分隔符连接成一个字符串,这一方法是Java8中引入的,极大地简化了... 目录bVARxMJava String.join() 方法详解1. 方法定义2. 基本用法2.1 拼接

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请