字符串连接类(Javascript)
根据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 };
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("");
}
};
* @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"));
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"));