首页 > 解决方案 > JS作为Object单实例中的Array属性

问题描述

一直在寻找以完全了解数组在对象中的工作原理。我熟悉其他语言,但这给我带来了很多困惑。有一个对象

var Test = {
    TestArray: [],
}
var a = Object.create(Test);
var b = Object.create(Test);

根据我的预期,这应该创建对象的 2 个实例并具有 2 个不同的数组,但是内部有一个数组的行为就像 1 个实例向数组添加值会影响两个实例,谁能解释为什么?

标签: javascriptarrays

解决方案


你是对的,Object.create正在创建一个新对象,但是每当你将一个对象传递给它时,它都会将该对象作为它的原型。

这意味着,如果该原型对象作为一个数组,则将共享相同的实例。

查看 MDN 中给出的示例,他们调用的函数在原型上,因此只有一个实例。

为了获得您的请求,您可以使用 ES6 类语法:

class Test {
  constructor() {
    this.TestArray = [];
  }
}

const t1 = new Test();
const t2 = new Test();

t1.TestArray.push('item1');
console.log(t1.TestArray);
console.log(t2.TestArray); // Should print an empty array


推荐阅读