javascript - JS作为Object单实例中的Array属性
问题描述
一直在寻找以完全了解数组在对象中的工作原理。我熟悉其他语言,但这给我带来了很多困惑。有一个对象
var Test = {
TestArray: [],
}
var a = Object.create(Test);
var b = Object.create(Test);
根据我的预期,这应该创建对象的 2 个实例并具有 2 个不同的数组,但是内部有一个数组的行为就像 1 个实例向数组添加值会影响两个实例,谁能解释为什么?
解决方案
你是对的,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
推荐阅读
- compiler-errors - Eiffel:一旦函数具有通用或锚定结果。尝试创建常量
- node.js - 如何在 node.js 的 package.json 中默认设置一个脚本以静默运行(如 npm run -s scriptname)?
- c# - C# 十进制检查不能正常工作
- regex - 在Scala中给定索引后的字符串中查找正则表达式匹配
- ios - Firebase SDK 崩溃
- python-2.7 - 条件参数的特定值的强制性子参数-Python 2.7
- wolfram-mathematica - 将 TimeSeriesAggregate 与日历月对齐
- node.js - 更改 npm 包上的标签:注册表在 https://registry.npmjs.com/-/package/path-protocol-test/dist-tags/latest 上为 PUT 返回 400
- json - 为什么我的代码将已排序的 JSON 文件解析为未排序的列表?| 哈斯克尔和埃森
- sql - 如何将获取日期转换为 yyyymmdd 格式?