Joh*_*son 3 javascript ecmascript-6
如何在一个对象上提供Object.Freeze?
下面是我下面创建,其中例如a,我复制a的b,冻结b,并尝试重新分配一个值a.但它已不再可能.为什么?我如何freeze只对一个对象做?
谢谢!
let a = { "teste" : [1,2,3] }
// I want 'b' freezed
const b = a;
Object.freeze(b);
a.teste = [4,5,6]
console.log(a)Run Code Online (Sandbox Code Playgroud)
我相信你在javascript中误解了引用的概念.对象在javascript中引用,所以当你这样做时
const b = a;
Run Code Online (Sandbox Code Playgroud)
基本上你分配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)Run Code Online (Sandbox Code Playgroud)