最近,我一直在使用JavaScript进行更多工作,我不明白为什么会发生以下情况。我没有提供数百行代码,而是创建了重现问题的场景。JavaScript - 将多个变量设置为对象属性不会改变基础值
问题:
设置多个变量的一个对象的属性不会改变对象的潜在价值。
实施例:
在以下示例中,我已经创建了两个类:
//company
function Company(name, subsidiary) {
var self = this;
self.name = name;
self.subsidiary = subsidiary;
};
//subsidiary
function Subsidiary(name, type) {
var self = this;
self.information = {
name: name,
type: type,
type2: type
};
}
现在,我执行以下操作:
- 创建一个新的公司,并在构造函数中添加新的子公司:
- 定义与/子公司性质
//new company
var company = new Company(
'Company 1', [
new Subsidiary('Subsidiary 1', 'small')
]),
subsid = company.subsidiary[0], //get first subsidiary
info = subsid.information, //get information
type = info.type; //get type
下面的代码是其他变量问题所在:
当我尝试更改变量类型时,公司内部值不变...
//does not work
type =
type === 'small' ?
'large' :
'small';
然而,如果我使用信息并引用属性类型(info.type
),该值的变化...
//works
info.type2 =
info.type2 === 'small' ?
'large' :
'small';
我假定由于每个可变从另一个导出,类型将相当于company.subsidiary[0].information.type
,但似乎并非如此。
我错过了什么吗?
任何援助将不胜感激。谢谢!
谢谢您花时间回答!但我仍然有点困惑。变量'info'不会是'company.subsidiary [0] .information'的副本吗?为什么要改变'info.type'改变公司内的价值? – Dom
因为你明确地**更新了对象属性的值。我会补充一点答案。 – Pointy
非常感谢您花时间解释这一点!你在解释究竟发生了什么时做了一件了不起的工作!再次感谢,我会尽快接受你的回答。 – Dom