默认情况下,所有对象都是可扩展的,使用Object.preventExtensions()方法可以改变这一行为。
var person = { name: "Hiram" }; Object.preventExtensions(person); person.age = 29; alert(person.age); //undefined虽然不能改对象添加新成员,但仍然可以修改和删除已有的成员,使用Object.isExtensible()方法还可以确定对象是否可以扩展。
ECMAScript 5 为对象定义的第二个保护级别是密封对象(sealed object)。要密封对象,可以使用Object.seal()方法。密封对象不可扩展,而且已有成员的[[Configurable]]特性将被设置为false,意味着不能删除属性和方法。
var person = { name: "Hiram" }; Object.seal(person); person.age = 29; alert(person.age); //undefined delete person.name; alert(person.name); //"Hiram"使用Object.isSealed()方法可以确定对象是否被密封了。
最严格的防篡改级别是冻结对象(frozen object),冻结的对象既不可扩展,又是密封的,而且对象数据属性的[[Writable]]特性会被设置为false。如果定义[[Set]]函数,访问器属性仍然是可写的。ECMAScript 5定义的Object.freeze()方法可以冻结对象。
var person = { name: "Hiram" }; Object.freeze(person); person.age = 29; alert(person.age); //undefined delete person.name; alert(person.name); //"Hiram" person.name = "Pierce"; alert(person.name); //"Hiram"使用Object.isFrozen()方法可以检测冻结对象。
转载于:https://www.cnblogs.com/hiramP/p/10572411.html
相关资源:javascript防篡改对象实例详解