无法更改Object的属性值 - JavaScript

时间:2017-07-09 06:28:00

标签: javascript json ajax

我的代码中有一个模块,我无法更改Object的属性值。我在代码中有更详细的解释,见下文:

var network = (function(){ // Created a closure.
  var ajax = { 
    response: 0, // I set the initial value of response to 0
    parse: function(x){
             var y = JSON.parse(x);
             ajax.response = y; // This is where things don't seem to work. Value of response is still 0.
           }
    // Some other code.

    } // End of ajax object.

    return { // I return an Object .
     invoke: function(x){ ajax.parse(x); },
     reply: ajax.response
     }

})();

network.invoke(valid_argument); // I invoke the function and pass a valid json string received from a server via ajax.
console.log(network.reply); // I get 0, which is the initial value. Why?

正如“守则”中提到的,这个问题很奇怪,任何帮助都表示赞赏。

2 个答案:

答案 0 :(得分:1)

  

我得到0,这是初始值。为什么呢?

由于def printMassage(List , mylabel): for dicts in List: if dicts[Label] == mylabel: print(dicts[Massage]) 分配给reply: ajax.response(副本),reply在执行该行时的值。对ajax.response的未来更改不会影响ajax.response,这两个属性之间没有内在联系。

以下是相同情况的简化示例:

reply

JavaScript是pass-by-value,而不是pass-by-reference。这意味着该值的副本将分配给var x = 42; var y = x; x = 21; console.log(y); // still 42 ,而不是对reply属性的引用。

答案 1 :(得分:0)

@Teja:Felix King向您展示了技术方面,这是真的。我想给出2美分的代码质量。 Javascript允许我们以非常灵活的方式编写代码,它看起来真的很混乱,Javascript代码很难阅读。所以你编写代码片段,看起来很复杂。避免过多使用功能。

@Felix King:我认为按值传递或通过引用传递与此无关。这些概念适用于传递给函数的参数,而不是赋值操作。