ExtはString類の拡張を詳しく分析します.



元のStringクラス:
         length属性、静的方法String.from CharCode()、17の例示的な方法.(ここの呼び方は全部分かりやすい方式で、厳密にOOという意味ではないです.)
         17の例示的な方法の簡単な表:
1、  charAt() 
2、  charCodeAt():文字列で指定された位置の文字コード(Unicoodeコード値)を返します.
3、  concat():1つ以上の値を文字列に接続する
4、  indexOf()
5、  lastIndexOf() 
6、  locale Compare():ローカライズされた順序で文字列を比較します.
7、  match():正規表現でパターンマッチングを行う
8、  replace() 
9、  search():検索文字列で正規表現にマッチするサブストリング
10、slice():文字列のサブストリングを返します.
11、スプリット()
12、substr()
13、substring() 
14、タワーベース()
15、toString()
16、  toUpperCase()
17、valueOf()
 
ExtのStringへの拡張
         Ext.jsでStringクラスに対して3つの静的方法を拡張しました.escape()、leftPad()、format()
二つの例示的な方法:togggg()、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()の方法はちょっと味がありますが、筆者は長い間そのメカニズムが分かりませんでした.