再谈StringBuilder对象

在《 JavaScript代码优化一例(文)》中,曾经引入了高效构造字符串的StringBuilder对象。不过,那里的StringBuilder比较简单,只有append()一个方法,下面给出经过修改的版本,新版本除增强了append()方法之外,还给出了类似C#中StringBuilder对象的appendFormat方法。
 
//
// StringBuilder
function StringBuilder()
{
 this._strings = new Array();
}
 
// enhanced append method
// append(arg1, arg2, ..., argN)
StringBuilder.prototype.append = function (str)
{
 var aLen = arguments.length;
 for (var i = 0; i < aLen; i++)
 {
  this._strings.push(arguments[i]);
 }
};
 
// like AppendFormat() method of C# StringBuilder object
// appendFormat(fmt, arg1, arg2, ..., argN)
StringBuilder.prototype.appendFormat = function (fmt)
{
 var re = /{[0-9]+}/g;
 var aryMatch = fmt.match(re);
 var aLen = aryMatch.length;
 
 for (var i = 0; i < aLen; i++)
 {
  fmt = fmt.replace(aryMatch[i], arguments[parseInt(aryMatch[i].replace(/[{}]/g, "")) + 1]);
 }
 
 this._strings.push(fmt);
};

StringBuilder.prototype.toString = function ()
{
 return this._strings.join("");
};
 
示例1:
var sXML = new StringBuilder();
sXML.append("<myData>/r/n");
sXML.append("<name>", name, "</name>/r/n");
sXML.append("<color>", color, "</color>/r/n");
sXML.append("</myData>/r/n");
alert(sXML.toString());
 
示例2:
var sHTML = new StringBuilder();
sHTML.appendFormat("<div style='width:{0}px;height:{1}px;background-color:{2};'>", width, height, bkcolor);
sHTML.appendFormat("<a class='{0}' href='{1}' target='_blank'>{2}</a>", className, url, name);
sHTML.append("</div>");
divObj.innerHTML = sHTML.toString();
 
由例子可以看出,append()适合于构造简单字符串,appendFormat()适合于构造复杂字符串。
测试结果显示,append()比appendFormat()快40% ~ 60%。
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值