如何在JavaScript中防止对象被修改?
ECMAScript 5 引入了几种方法来防止对象被修改。这些预防措施确保没有人意外或有意地更改对象的的功能。
共有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) 冻结
除了密封的功能外,冻结甚至不允许访问现有属性。要冻结对象,我们使用 **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.
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP