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"));