《仔仔细细分析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 的源码注释和示例翻译一下:


 

/**

 * @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() 方法倒是有点味道,笔者思虑半天没有明白它的机制,知道的高手请指点,万谢!


你可能感兴趣的:(JavaScript,正则表达式,ext,prototype,OO)