Object.Freeze Javascript
这个问题在这里已经有了答案:
我相信你误解了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中的对象通过引用传递,因此在您的示例中,变量a
和b
引用同一个对象。 Object.freeze
作用于对象本身,而不是引用,所以使用a
或b
引用它就没有区别。 这与您刚刚设置属性的情况相同:
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
。