• 字符串连接类(Javascript)


    Get latest version 

    根据12楼,改进下,支持连写:

     1 /*
     2  * @author: uedsky
     3  * @version: 1.1
     4  */
     5 
     6 /**
     7  * @class String concat
     8  * @return {StrBuf/String}
     9  * @constructor
    10  * eg:
    11     var buf = new StrBuf("contructor str\n");
    12     buf.push("hello,")
    13     .push("Today is {0}, {1}", "Monday", "March 28th")
    14     .push("${name} is a good ${category} company", {name: "Google", category: "Intenet"});
    15     document.write(buf);// auto call toString method
    16     console.log(buf);
    17     console.log(StrBuf("static {0} method", "invoke"));
    18  */
    19 var StrBuf = function(s) {
    20     this.data = [];
    21     if(s) {
    22         var args = arguments, buf;
    23         if(this instanceof StrBuf) {
    24             this.push.apply(this, args);
    25         }else {// static invoke
    26             buf = new StrBuf();
    27             return buf.push.apply(buf, args).toString();
    28         }
    29     }
    30 };
    31 StrBuf.prototype = {
    32     // add String to the instance
    33     push: function(s, j) {
    34         var args = arguments;
    35         if(args.length < 2) {
    36             this.data.push(s || "");
    37         }else if(typeof j == 'object'{
    38             this.data.push(s.replace(/\$\{([\w.]+)\}/gfunction($, $1) {
    39                 return ($1 in j) ? j[$1] : $;
    40             }));
    41         }else {
    42             this.data.push(s.replace(/\{(\d+)\}/gfunction($, $1) {
    43                 return args[+$1 + 1];
    44             }));
    45         }
    46         return this;
    47     },
    48     toString: function() {
    49         return this.data.join("");
    50     }
    51 };

    最近在看一同事写的代码时,有一个字符串用了一堆“+”号,看了半天没明天到底会输出什么样的内容,

    就想到用字符串连接的类,把以前的方法写成了类的方式,方便调用 ,

    支持实例调用 和静态调用

    参数可以是单独的字符串,或者json的格式,或者类似参数数组的方式,见下面示例 

     /*

     * @author: uedsky
     * @version: 1.0
     */

    /**
     * @class String concat
     * @return {StrBuf/String}
     * @constructor
     
    */
    var StrBuf = function(s) {
        
    this.data = [];
        
    if(s) {
            
    var args = arguments, buf;
            
    if(this instanceof StrBuf){
                
    this.push.apply(this, args);
            }
    else{// static invoke
                buf = new StrBuf();
                buf.push.apply(buf, args);
                
    return buf.toString();
            }
        }
    };
    StrBuf.prototype 
    = {
        
    // add String to the instance
        push: function(s, j){
            
    var args = arguments;
            
    if(args.length < 2) {
                
    this.data.push(s || "");
            }
    else if(typeof j == 'object'){
                
    this.data.push(s.replace(/\$\{([\w.]+)}/g, function($, $1){
                    
    return ($1 in j) ? j[$1] : $;
                }));
            }
    else {
                
    this.data.push(s.replace(/\{(\d+)}/g, function($, $1){
                    
    return args[+$1 + 1];
                }));
            }
        },
        toString: 
    function(){
            
    return this.data.join("");
        }
    };
     
    调用 示例如下:

          var buf = new StrBuf("contructor str\n");

        buf.push("hello,");
        buf.push(
    "Today is {0}, {1}""Monday""March 28th");

        buf.push(
    "${name} is a good ${category} company", {name: "Google", category: "Intenet"});
        document.write(buf);
    // auto call toString method
        console.log(buf);
        console.log(StrBuf(
    "static {0} method""invoke"));
  • 相关阅读:
    推箱子(简易版)
    [LeetCode] Word Ladder II
    [LeetCode] Path Sum
    [LeetCode] Word Ladder
    DFS & BFS
    [LeetCode] Surrounded Regions
    [LeetCode] Add Binary
    [LeetCode] Plus One
    [LeetCode] Single Number II
    [LeetCode] Single Number
  • 原文地址:https://www.cnblogs.com/sohighthesky/p/string_buf.html
Copyright © 2020-2023  润新知