【问题标题】:don't change object after passing function传递函数后不要更改对象
【发布时间】:2015-01-07 09:19:21
【问题描述】:
myObject = {foo: foo, bar: bar}

function myFunc(obj){
    obj.foo = 'new foo';
}

myFunc(myObject); {foo: 'new foo', bar: bar}

为什么 myObject 会改变?我不想改变它

【问题讨论】:

  • 这是什么语言?
  • 如果你不想改变它......不要改变它。

标签: javascript object constants


【解决方案1】:

问题是对象是通过引用传递的。如果您不希望函数修改输入参数,则可以在将对象传递给函数之前对其进行深层复制。或者更好,write pure functions as much as possible – without any side effects.

myObject = {foo: foo, bar: bar}

function myFunc(obj){
    obj.foo = 'new foo';
}

myFunc(JSON.parse(JSON.stringify(myObject)));

【讨论】:

    【解决方案2】:

    您应该在myObject 下定义foo 属性,如下所示。

    Object.defineProperty(myObject, 'foo', {   
      value: '<value u want to put for this object>'
      configurable: false,
      writable: false,
    });
    

    configurable 属性告诉属性是否可以被删除以及它的属性(除了可写的)是否可以改变。

    writable 属性告诉属性值是否可以更改。

    【讨论】:

      猜你喜欢
      • 2020-08-11
      • 1970-01-01
      • 2013-11-07
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多