如何防止在JavaScript中修改对象?
ECMAScript5引入了几种防止修改对象的方法。这些预防措施确保没有任何人意外或以其他方式更改对象的功能。
预防方法共3级
1)防止扩展
在此级别,不能添加任何新的属性或方法,但可以访问现有的属性或方法。这里可以删除相应的对象。Object.preventExtensions()是用于完成此任务的方法。这样可以防止将任何新属性添加到对象中。
示例
<html>
<body>
<script>
var object1 = {
prop1: 1
};
Object.preventExtensions(object1);
delete object1.prop1 // value got deleted
try {
Object.defineProperty(object1, 'prop2', {
value: 2
});
} catch (err) {
document.write(err);
}
document.write("</br>");
document.write(object1.prop1);
</script>
</body>
</html>输出结果
TypeError: Cannot define property prop2, object is not extensible undefined // deleted so undefined
2)密封
它与防止扩展相同,此外,它不允许删除现有的属性或方法。为了完成此任务,使用了Object.seal()方法。
示例
<html>
<body>
<script>
var object1 = {
prop1: 1
};
Object.seal(object1);
object1.prop1 = 2; // value got changed
delete object1.prop1;
try {
Object.defineProperty(object1, 'prop2', {
value: 2
});
} catch (err) {
document.write(err);
}
document.write("</br>");
document.write(object1.prop1); // it gives value as 2 because of seal.
</script>
</body>
</html>输出结果
TypeError: Cannot define property prop2, object is not extensible 2 // because of seal the value can't be deleated but got updated
3)冻结
除了Seal的功能之外,冻结甚至不允许访问现有属性。要冻结对象,我们使用 Object.freeze()方法。它还可以使对象不可变。
示例
<html>
<body>
<script>
var object1 = {
prop1: 1
};
Object.freeze(object1);
object1.prop1 = 2; // value got updated
delete object1.prop1; // value got deleted
try {
Object.defineProperty(object1, 'prop2', {
value: 2
});
} catch (err) {
document.write(err);
}
document.write("</br>");
document.write(object1.prop1); // it gives 1 as output despite value updated to 2
</script>
</body>
</html>输出结果
TypeError: Cannot define property prop2, object is not extensible 1 // because of freeze the value won't get delete and won't get update.
热门推荐
10 亲姐姐怀孕祝福语简短
11 舅舅大婚文案祝福语简短
12 迟到的过年祝福语简短
13 老师节祝福语的简短
14 满月红包英文祝福语简短
15 学生祝福语简短古诗句
16 初八的祝福语简短
17 住学长学姐祝福语简短
18 新年留言老师祝福语简短