簡體   English   中英

JavaScript-將多個變量設置為對象屬性不會更改基礎值

[英]JavaScript - setting multiple variables to object properties does not change underlying value

最近,我一直在使用JavaScript進行更多工作,但我不明白為什么會發生以下情況。 我沒有提供數百行代碼,而是創建了一個重現問題的方案。

問題:

為對象的屬性設置多個變量不會更改對象的基礎值。


例:

DEMO

在下面的示例中,我創建了兩個類:

//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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM