搜索了一段时间以完全了解数组在对象中的工作原理。我熟悉其他语言,但这给我带来了很多困惑。 有对象
var Test = {
TestArray: [],
}
var a = Object.create(Test);
var b = Object.create(Test);
根据我的预期,这应该创建对象的 2 个实例并具有 2 个不同的数组,但是内部数组的行为类似于 1 个实例,向数组添加值会影响两个实例,谁能解释为什么?
最佳答案
你是对的,Object.create
正在创建一个新对象,但是每当您将一个对象传递给它时,它都会将该对象作为它的原型(prototype)。
意思是,如果那个原型(prototype)对象是一个数组,那么它们将共享同一个实例。
查看MDN给出的例子,他们调用的函数在原型(prototype)上,因此只有一个实例。
为了获得你的请求,你可以使用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
关于javascript - JS作为Object单实例中的Array属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53419888/