0

我有这些 JavaScript 实体:Item 和 Items。

var exports = {};
exports.Item = function(item) {
    if (item) {
        for (var attr in this.attributes) {
            var value = item[attr];
            if (value !== undefined) {
                this.attributes[attr] = value;
            }
        }
    }
    return this;
};

exports.Item.prototype.attributes = {
    _id: "",
    title: ""
};

exports.Items = function(items) {
    if (items && items.length > 0) {
        for (var i = 0; i < items.length; i++) {
            this.add(items[i]);
        }
    }
};

exports.Items.prototype.arr = [];
exports.Items.prototype.add = function(item) {
    if (item) {
        item = new exports.Item(item);
        this.arr.push(item.attributes);
    }
};
exports.Items.prototype.toJSON = function() {
    var json = [];
    for (var i = 0; i < this.arr.length; i++) {
        json.push(this.arr[i]);
    }
    return json;
};

var i1 = new exports.Item({
    _id: "1",
    title: "1"
});

var i2 = new exports.Item({
    _id: "2",
    title: "2"
});

var i3 = new exports.Item({
    _id: "3",
    title: "3"
});

var items = new exports.Items([i1,i2,i3]);
console.log(items.toJSON());

有一个我找不到的问题。当我执行以下代码时,我得到最后一个项目 3 次而不是所有项目。
我确信这个错误是我看不到的小东西。也许你能帮助我?

4

1 回答 1

1

不应在原型中初始化成员变量。原型变量将在所有实例之间共享。相反,在构造函数中定义成员。所以,而不是这个:

exports.Items.prototype.arr = [];

做这个:

exports.Items = function(items) {
    this.arr = []; // instance variable

    if (items && items.length > 0) {
        for (var i = 0; i < items.length; i++) {
            this.add(items[i]);
        }
    }
};
于 2013-01-26T20:45:22.507 回答