Object.Freeze Javascript

这个问题在这里已经有了答案:

  • 在JavaScript中深入克隆对象的最有效方法是什么? 57个答案
  • 我如何正确克隆一个JavaScript对象? 54个答案

  • 我相信你误解了JavaScript中引用的概念。 对象在JavaScript中引用,所以当你这样做

    const b = a;
    

    基本上,你为b分配了一个参考值a ,为了让你的代码正常工作,并实际上像你打算的那样“复制”,你需要克隆不通过引用的对象。

    您可以使用Object.assign({}, ...)将对象克隆为新对象。 (注意,它不是很深的克隆,但它应该让你去)

    let a = { "teste" : [1,2,3] }
    
    // I want 'b' freezed
    const b = Object.assign({}, a);
    Object.freeze(b);
    
    a.teste = [4,5,6]
    
    console.log(a)

    Javascript中的对象通过引用传递,因此在您的示例中,变量ab引用同一个对象。 Object.freeze作用于对象本身,而不是引用,所以使用ab引用它就没有区别。 这与您刚刚设置属性的情况相同:

    let a = { "test" : [1,2,3] }
    const b = a;
    b.test = [4,5,6]
    console.log(a)
    

    如果你想冻结或修改b而不影响a ,你需要先克隆它。 一种做法是使用Object.assign

    let a = { "test" : [1,2,3] }
    
    const b = Object.assign({}, a);
    Object.freeze(b);
    a.test = [4,5,6]
    
    console.log(a)
    

    这是通过所有的复制a的属性为空的对象,然后将其赋值给b

    链接地址: http://www.djcxy.com/p/24775.html

    上一篇: Object.Freeze Javascript

    下一篇: Cloning JSON not working as expected