javascript - JS作为Object单实例中的Array属性

标签 javascript arrays

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

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/

相关文章:

javascript - jQuery如何动态添加选择元素并重置选择?

c++11 std::array vs 静态数组 vs std::vector

javascript - 如何比较输入和 JSON 数据

javascript - 总结数组的对象

javascript - HTML 中的谷歌搜索?

javascript - jQuery Validate 插件 - 如何根据各种条件显示不同的错误消息

javascript - Google Sheets 脚本日期比较未返回预期结果

javascript - 如何在 openweather API 中获取地理定位

C# 排除数组对象

javascript - Jquery:代码未在 Rails 中的页面加载时执行