防篡改对象不可扩展对象默认情况下,所有对象都是可扩展的: var person = { name: "Oliver" }; person.age = 18; console.log(person.age); //18 不可扩展可以使用这个方法: Object.preventExtensions(obj) ; var person = { name: "Oliver" }; person.age = 18; console.log(person.age); //18 Object.preventExtensions(person); person.gender = "male"; console.log(person.gender); //undefined 严格模式下会抛出错误; 一旦设置防扩展, 对象就无法添加新的属性和方法。 已有的属性方法不受影响, 这些属性方法仍然可以修改和删除。 var person = { name: "Oliver" }; person.age = 18; console.log(person.age); //18 Object.preventExtensions(person); person.gender = "male"; console.log(person.gender); //undefined person.name = "Oli"; console.log(person.name); //Oli 另外还可以通过使用 Object.isExtensible() 方法来确定对象是否可扩展 var person = { name: "Oliver" }; person.age = 18; console.log(person.age); //18 Object.preventExtensions(person); person.gender = "male"; console.log(person.gender); //undefined person.name = "Oli"; console.log(person.name); //Oli console.log(Object.isExtensible(person)); //False 密封对象密封对象可以使用方法: Object.seal(obj); var person = { name: "Oliver" }; Object.seal(person); person.age = 18; console.log(person.age); //undefined person.name = "Oli"; console.log(person.name); //"Oli" delete person.name; console.log(person.name); //"Oli" 一旦设置密封对象, 不可以进行扩展, 已有属性和方法不可以删除, 但是属性值是可以修改的。 严格模式尝试添加或删除对象成员会抛出错误; var person = { name: "Oliver" }; Object.seal(person); console.log(Object.isSealed(person)); //True console.log(Object.isExtensible(person)); //False 冻结的对象冻结对象可以使用方法: Object.freeze(obj) ; 一旦设置冻结对象, 既不可以扩展, 又是密封的, 只有通过访问器的set函数才可以修改属性值, 其他情况下不允许修改。 var person = { name: "Oliver" }; Object.freeze(person); person.name = "Oli"; console.log(person.name); //"Oliver" person.age = 18; console.log(person.age); //undefined console.log(Object.isFrozen(person)); //True 检测是否被冻结,用 Object.isFrozen() 方法 (责任编辑:好模板) |