字符串连接类(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"));
分类:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器