为什么对象重写另一个冻结的对象

时间:2019-03-25 06:39:25

标签: javascript

我不明白为什么我的对象会覆盖另一个冻结的对象,我尝试从先前的对象创建一个新实例,然后冻结它。但是无论如何,即使被冻结它也会覆盖自身
另外,为什么我可以更改check对象const
JS确实很奇怪

我有下面的代码

let obj = {check: "check"};  
const check = Object.create(obj);
Object.freeze(check);
obj["second"] = "something";
// Expected result: obj = {check: "check", second: "something"}
// check = {check: "check"}

// Actual result: obj = {check: "check", second: "something"}
// check = {check: "check", second: "something"}

2 个答案:

答案 0 :(得分:2)

Object.create()不会克隆您应使用的对象Object.assign

let obj = {check: "check"};  
const check = Object.create(obj);
Object.seal(check);
obj["second"] = "something";
console.log(check)

答案 1 :(得分:0)

Object.create()方法使用现有对象作为新创建的对象的原型来创建新对象。子对象可以访问原型的属性。

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

如果要克隆对象,则必须使用Object.assign()。