字串串連類(Javascript)

來源:互聯網
上載者:User

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.]+)\}/g, function($, $1) {
39                  return ($1  in j) ? j[$1] : $;
40             }));
41         } else {
42             this.data.push(s.replace(/\{(\d+)\}/g, function($, $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"));

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.