在Javascript中,对象的扩展属性,用于指示是否一个新的属性可以被动态地添加到对象。在ECMAscript 3标准,所有的对象都是可扩展的,ECMAscript 5标准,所有的对象仍然是可扩展的默认的,但可以改变设置。



发现如果一个对象是可扩展的,你可以用object.isextensible()语句:



复制代码代码如下所示:

var:x:1 };

console.log(object.isextensible(O)); / /真的





要使一个物体不可扩展的,你可以用object.preventextensions()语句:



复制代码代码如下所示:

object.preventextensions(O)

console.log(object.isextensible(O)); / /假





值得注意的是,因为没有object.preventextensions()反操作语句,一旦对象是不可扩展的,就没有办法把它带回扩展了。



该object.preventextensions范围()语句是对象本身,和原型对象不受影响。如果一个对象被设置为非可扩展的特性,还可以动态地添加到原型对象,而动态添加的属性也可以被继承的对象。



Object.seal()和Object.freeze()



object.preventextensions()可以防止在对象的新属性的动态增加。除了这个操作,有两个更严格的行动来保护Javascript对象:Object.seal()和Object.freeze()。



Object.seal的角色是()来设置所有对象的属性为false,可配置的属性的基础上,对object.preventextensions()。与object.preventextensions()Object.seal()操作,不能反向操作,所以一旦对象是密封的,它不能够恢复状态,Javascript,object.issealed()可以用来查询一个对象是否是密封的。



Object.freeze的角色是()来设置所有对象本身对object.seal基础为只读属性()Like Object.seal()和object.preventextensions()操作,Object.freeze()没有反向操作,所以一旦对象被冻结,将无法恢复状态。在Javascript,Object.isFrozen()可以用来查询一个对象是否被冻结。



复制代码代码如下所示:

console.log(object.issealed(O)); / /假

Object.seal(O);

console.log(object.issealed(O)); / /真的

console.log(Object.isFrozen(O)); / /假

Object.freeze(O);

console.log(Object.isFrozen(O)); / /真的





无论是Object.preventExtensions()、Object.seal()和Object.freeze(),活动的范围是所有的对象,和对象的原型对象将不受影响。