本文主要是介绍《仔仔细细分析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 的源码注释和示例翻译一下:
- <SPAN style="FONT-SIZE: medium">/**
- * @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('<div class="{0}">{1}</div>', cls, text);
- // s now contains the string: '<div class="my-class">Some text</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, ""); };
- }();</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('<div class="{0}">{1}</div>', cls, text);// s now contains the string: '<div class="my-class">Some text</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类的扩展的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!