在js中,任何对象都可以被在同一环境中运行的代码修改,开发人员很可能意外的修改别人的代码,甚至用不兼容的功能重写原生对象,这种js共享的本质一直是开发人员心头的痛,ES5提供了防篡改对象,致力于解决这个问题。
不可扩展对象
通过Object.preventExtensions()方法可以将对象设置为不可扩展,即时动态添加了属性,也是不生效的
var obj = {
name: 'wang'
}
Object.preventExtensions(obj);
obj.age = 18;
console.log(obj.age); //undefined
console.log(Object.isExtensible(obj)); //false
判断一个对象是否可以扩展,用Object.isExtensible()
密封对象
密封对象在不可扩展的基础上,也不能删除属性和方法,也就是将对象的[[Configurable]]
特性设置为了false。
Object.seal(obj);
delete obj.name;
console.log(obj.name); //wang
console.log(Object.isSealed(obj)); //true
判断一个对象是否密封,用Object.isSealed()
冻结对象
冻结对象(frozen object)是最严格的防篡改级别,即不可扩展,又是密封的,而且属性和方法是不可编辑的,也就是将对象的[[Writeable]]
特性设置为了false
Object.freeze(obj);
obj.name = 'zhang';
console.log(obj.name); //wang
Object.isFrozen(obj); //true
判断一个对象是否冻结,用Object.isFrozen()
网友评论