JavaScript-创建对象的多个实例以存储/更新单独的数组

时间:2019-05-18 19:48:11

标签: javascript object-create

我试图在一个函数中创建一个对象的多个实例,以存储和更新单独的数组。但是,对象的实例正在更新同一数组,而不是单独的数组。

这是示例代码:

let DoSomeWork = {
    work_product: [],
    getWorkProduct: function() {
        return this.work_product;
    },
    work: function(string) {
        let work_product = this.work_product;

        work_product.push(string);
    }
};


function main() {
    let do_some_work_1 = Object.create(DoSomeWork);
    let do_some_work_2 = Object.create(DoSomeWork);

    for (let i = 0; i < 3; i++) {
        do_some_work_1.work('do_some_work_1 - loop ' + i);
        do_some_work_2.work('do_some_work_2 - loop ' + i);
    }

    console.log(do_some_work_1.getWorkProduct());
    console.log(do_some_work_2.getWorkProduct());
}

main();

实际输出:

[ 'do_some_work_1 - loop 0',
  'do_some_work_2 - loop 0',
  'do_some_work_1 - loop 1',
  'do_some_work_2 - loop 1',
  'do_some_work_1 - loop 2',
  'do_some_work_2 - loop 2' ]

[ 'do_some_work_1 - loop 0',
  'do_some_work_2 - loop 0',
  'do_some_work_1 - loop 1',
  'do_some_work_2 - loop 1',
  'do_some_work_1 - loop 2',
  'do_some_work_2 - loop 2' ]

预期输出:

[ 'do_some_work_1 - loop 0',
  'do_some_work_1 - loop 1',
  'do_some_work_1 - loop 2' ]

[ 'do_some_work_2 - loop 0',
  'do_some_work_2 - loop 1',
  'do_some_work_2 - loop 2' ]

我的理解是Object.create()使用不同的变量创建对象的独立实例,但事实并非如此。有人可以解释为什么会发生这种情况,以及如何修改代码以存储和更新单独的数组吗?

0 个答案:

没有答案