字符串连接类(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"));
posted @ 2011-03-28 09:06  sohighthesky  阅读(2347)  评论(14编辑  收藏  举报