0

如何在单击“创建”按钮时将对象的最后状态添加到数组并创建新的清理准备继续,如果单击“继续”按钮仅修改实际对象,现在修改部分数组中的所有对象?

说明材料:

HTML:

<button onclick="create()">Create</button>
<button onclick="add()">Continue</button>

​ JavaScript:

var sections = [];

create = function() {
    sections.push(section);

    section.array = [];
    section.c = 0;

    section.add();

    $("body").append("<br>Add to array at moment last state of object and make new one<br>" + JSON.stringify(sections) + "<br >");
}

add = function() {
    section.add();

    $("body").append("<br>continue only this object<br>" + JSON.stringify(sections) + "<br >");
}

var section = {
    array: [],
    c: 0,
    add: function() {
        section.c++;
        section.array.push(section.c);
    }
}​
4

2 回答 2

1

您将需要创建新的部分对象,而不是重置一个section变量的属性(在您的create函数中):

var sections = [],
section = makeSection();

function create() {
    sections.push(section); // add the current section
    section = makeSection(); // make a new one
    section.add();

    $("body").append("<br>Add to array at moment last state of object and make new one<br>" + JSON.stringify(sections) + "<br >");
}

function add() {
    section.add();
    $("body").append("<br>continue only this object<br>" + JSON.stringify(sections) + "<br >");
}

function makeSection() {
    return {
        array: [],
        c: 0,
        add: function() {
            section.c++;
            section.array.push(section.c);
        }
    }​;
}

然而,我想说这是构造函数的情况:

function Section() {
    this.array = [];
    this.c = 0;
    // maybe do this automatically on constructing:
    // this.add();
    // sections.push(this);
}
Section.prototype.add = function() {
    this.c++;
    this.array.push(section.c);
}

然后使用new Section()而不是makeSection().

于 2012-05-17T16:02:36.583 回答
0

试试这个:

sections.push(JSON.parse(JSON.stringify(section)));

这有点hacky,但它会将对象的新副本推送到数组sections,而不是引用,有效地保存对象的状态。这段代码实际上是在使用 JSON 库stringifying 然后parseing 一个对象,该对象返回一个新对象。

于 2012-05-17T16:02:51.457 回答