function Dealership = function(){
this.car1="Honda";
this.car2="Chevy";
this.car3="Toyota";
this.carList=[this.car1,this.car2,this.car3];
};
var tomsauto = new Dealership();
tomsauto.car2="Subaru";
console.log(tomsauto.carList); //returns honda chevy toyota
我对如何处理数组感到困惑。它是静态的,仅保存它在实例化时具有的变量值,还是当我更改tom.car1时“this.car1”会改变吗?
答案 0 :(得分:4)
通过该数组实例化表达式创建数组时,运行时系统会将每个对象属性的值复制到数组中。如果稍后更改属性的值,它们将单独更改数组元素。
JavaScript中没有办法让一个对象的属性“镜像”另一个对象的属性。 (好吧,没有内在的方法;你可以编写代码来实现它。)
答案 1 :(得分:2)
正如Teemu
所说:carList
填充了值,而不是参考。
一个简单的解决方法是将其更改为函数getCarList
:
var Dealership = function () {
this.car1 = "Honda";
this.car2 = "Chevy";
this.car3 = "Toyota";
this.getCarList = function() {
return [this.car1, this.car2, this.car3];
}
};
var tomsauto = new Dealership();
tomsauto.car2 = "Subaru";
console.log(tomsauto.getCarList());
答案 2 :(得分:0)
我认为你遇到了这个问题,因为JavaScript中的闭包工作方式。
当您按照惯例声明函数时,car1,car2,car3的值将在该范围内进行评估,然后分配给该数组。
当您执行新的Dealership()位时,该数组的值几乎与评估函数时的值相同。你做完
之后tomsauto.car2 = "Subaru";
car2的值会改变,但是数组不会因为没有重新评估这些值。
如果您想了解更多关于如何以及为什么的信息,我建议您阅读更多关于javascript和函数式语言的闭包。