[英]JavaScript - setting multiple variables to object properties does not change underlying value
最近,我一直在使用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並引用屬性類型 ( info.type
),則值會更改...
//works
info.type2 =
info.type2 === 'small' ?
'large' :
'small';
我假設由於每個變量都是從另一個變量派生的,所以類型將等效於company.subsidiary[0].information.type
,但事實並非如此。
我想念什么嗎?
任何幫助將不勝感激。 謝謝!
您有一個帶有稱為“類型”的屬性的對象。 您獲取該屬性的值, 並將該值的副本放入稱為“ type”的局部變量中。 隨后對局部變量的更改將不會影響對象屬性值。
您的假設:
我假設由於每個變量都來自另一個變量,所以類型將等同於company.subsidiary [0] .information.type
是不正確的。 JavaScript賦值運算符表示值復制操作。 從而,
var type = info.type;
表示應將對象屬性的值復制為變量的值。 此后,變量和對象屬性之間絕對沒有特殊關系。
然后,在這里:
var info = subsid.information;
您正在建立一個名為“ info”的變量,其中包含該“ information”屬性值的副本。 那值多少錢? 它是對對象的引用 。 這就是為什么后續更新實際上會更改原始對象中real屬性的值的原因。
沒有直接的方法可以使簡單的局部變量成為JavaScript中對象屬性的別名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.