是否可以使用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 红包祝福语简短10字
15 送同事出院祝福语简短
16 预祝中秋简短的祝福语
17 小班小孩生日祝福语简短
18 古风考试祝福语 唯美简短