我试图在一个函数中创建一个对象的多个实例,以存储和更新单独的数组。但是,对象的实例正在更新同一数组,而不是单独的数组。
这是示例代码:
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()
使用不同的变量创建对象的独立实例,但事实并非如此。有人可以解释为什么会发生这种情况,以及如何修改代码以存储和更新单独的数组吗?