<script type="text/javascript">
function StringBuffer() {
this.bb = [];
}
StringBuffer.prototype.append = function(str) {
this.bb.push(str);
}
StringBuffer.prototype.toString = function() {
return this.bb;
}
var sb = new StringBuffer();
sb.append("abcd");
document.write(sb);
</script>小弟写了个字符串连接的类,在toString方法 里返回this.bb;为啥返回给我的是undefined呢,而不是数组里的内容呢?
function StringBuffer() {
this.bb = [];
}
StringBuffer.prototype.append = function(str) {
this.bb.push(str);
}
StringBuffer.prototype.toString = function() {
return this.bb;
}
var sb = new StringBuffer();
sb.append("abcd");
document.write(sb);
</script>小弟写了个字符串连接的类,在toString方法 里返回this.bb;为啥返回给我的是undefined呢,而不是数组里的内容呢?
实际上你可以随便定义什么:
StringBuffer.prototype.toString = function() {
return this.bb;
}
---------------》
StringBuffer.prototype.abcde= function() {
return this.bb;
}
....
document.write(sb.abcde());
你的bb里的字符串要拼接成string的大哥!!
代理流程为:
1.得到对象
2.判断对象不为String,调用对象的toString方法
3.如果2的返回值不为String,则返回undefined。如果你直接调用toString,就不会有这个代理的过程。ps. js中代理模式得到广泛应用。比如关键字new也是代理的。
详细可以参考我的博客
http://www.iteye.com/topic/1038974
你也看到了 函数名称是 toString 意思是返回字符串嚒 那你干嘛返回一个 Array呢?
StringBuffer.prototype.toString = function() {
return this.bb.toString();
}
这样写就不会产生歧义了
会自动调用 sb 的 toString 方法但只有当 typeof sb.toString() === "string" 时,才会使用 sb.toString() 的返回值它没有尝试去调用 sb.toString().toString()所以你应该修改你的代码StringBuffer.prototype.toString = function() {
// return this.bb.toString()
return this.bb.join("");
};