Javascript这种混乱

时间:2015-01-21 23:42:40

标签: javascript

function StringBuffer(initialStr) {
    this.append(initialStr);
}
StringBuffer.prototype = {
    items: [],
    append: function(str) {
        this.items[this.items.length] = str instanceof StringBuffer ? str.toString() : str;
        return this;
    },
    toString: function() {
        return this.items.join("");
    }
};
alert(new StringBuffer("foo").append(new StringBuffer("bar")).toString());

如何确保此警报" foobar" ?

2 个答案:

答案 0 :(得分:2)

您需要具有实例items属性,而不是共享:

function StringBuffer(initialStr) {
    this.items = [];
    this.append(initialStr);
}

并将其从原型中移除。

否则StringBuffer的所有实例都会改变同一个数组。

答案 1 :(得分:1)

使items成为实例变量而不是所有StringBuffer实例共享的数组。

function StringBuffer(initialStr) {
    this.items = [];
    this.append(initialStr);
}
StringBuffer.prototype = {
    append: function(str) {
        this.items[this.items.length] = str instanceof StringBuffer ? str.toString() : str;
        return this;
    },
    toString: function() {
        return this.items.join("");
    }
};