是否可以使用JavaScript中的Object.freeze()使嵌套对象不可变?
Object.freeze()方法可以使对象不可变, 但是如果嵌套了对象,则无法防止可变性。Object.freeze()只能为外部父对象提供不变性 ,它不能访问任何内部子对象(嵌套)。
示例
在下面的示例中,没有嵌套对象。Object.freeze() 方法将尝试冻结 整个对象。因此,即使在冻结对象之后,属性“名称”也没有变化。
<html>
<body>
<script>
const person = {
"name" : "Suresh",
"Country" : "India",
"Designation" : "Mayor"
}
document.write("Before freeze the name is" +" "+ person.name );
document.write("</br>");
Object.freeze(person);
person.name = "John";
document.write("After freeze the name is" +" "+ person.name);
</script>
</body>
</html>输出结果
Before freeze the name is Suresh After freeze the name is Suresh
当嵌套对象被Object.freeze()尝试冻结时 ,结果是徒劳的,因为Object.freeze()无法访问嵌套对象。
示例
在下面的示例中,即使使用 Object.freeze()方法冻结 了对象,嵌套对象的属性也会更改。
<html>
<body>
<script>
const person = {
"name" : "Suresh",
"Country" : "India",
"Designation" : "Mayor",
"CompaniesOwned" :{
"Company1" : "Tesla",
"Company2" : "SolarCity",
"Company3" : "Spacex"
}
}
document.write("Before freeze " + " " + "Company2 is" + " "+ person.CompaniesOwned.Company2);
Object.freeze(person);
document.write("</br>");
person.CompaniesOwned.Company2 = "Neuralica";
document.write("After freeze" + " " + "Company2 is" + " "+ person.CompaniesOwned.Company2);
</script>
</body>
</html>输出结果
Before freeze Company2 is SolarCity After freeze Company2 is Neuralica
热门推荐
10 读书祝福语女生短句简短
11 感谢同事新婚祝福语简短
12 感谢教官文案祝福语简短
13 员工聚会蛋糕祝福语简短
14 元宵发客户祝福语简短
15 给团队信心祝福语简短
16 医美的祝福语大全简短
17 异国姻缘的祝福语简短
18 兄妹拍照祝福语简短的话