数组没有正确填充

时间:2013-01-26 20:39:43

标签: javascript node.js

我有这些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次,而不是所有项目 我确信错误是我看不到的小事。也许你可以帮帮我?

1 个答案:

答案 0 :(得分: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]);
        }
    }
};