En JavaScript, la propiedad extensible del objeto se usa para indicar si se permiten agregar nuevas propiedades dinámicamente en el objeto. En el estándar Ecmascript 3, todos los objetos son extensibles. En el estándar EcMascript 5, todos los objetos aún son extensibles de forma predeterminada, pero esta propiedad se puede cambiar mediante la configuración.
Para verificar si un objeto es extensible, puede usar la declaración Object.IsExtensible ():
La copia del código es la siguiente:
var o = {x: 1};
console.log (object.isExtensible (o)); // true
Para hacer un objeto que no sea extensible, puede usar la declaración Object.PreventExtensions ():
La copia del código es la siguiente:
Object.PreventExtensions (o)
console.log (object.isExtensible (o)); // falso
Vale la pena señalar que, dado que no hay una declaración de operación inversa de Object.PreventExtensions (), una vez que un objeto no se extensa, no hay forma de establecerlo para extenderse nuevamente.
El alcance de la declaración Object.PreventExtensions () es el objeto en sí, y el objeto prototipo no se ve afectado. Si un objeto se establece en no extensible, las propiedades aún se pueden agregar dinámicamente en su objeto prototipo, y estas propiedades agregadas dinámicamente aún pueden ser heredadas por el objeto.
Object.Seal () y Object.Freeze ()
Object.PreventExtensions () evita que las nuevas propiedades se agregan dinámicamente en objetos. Además de esta operación, hay dos operaciones más estrictas en JavaScript para proteger objetos: object.seal () y object.freeze ().
La función de Object.Seal () es establecer la propiedad configurable de la propiedad de todos los objetos en falso sobre la base de Object.PreventExtensions (). Al igual que la operación Object.PreventExtensions (), Object.Seal () no tiene anti-operación, por lo que el objeto no se puede restaurar una vez que se sella. En JavaScript, puede usar Object.issealed () para consultar si un objeto ha sido sellado.
La función de Object.Freeze () es establecer la propiedad de todos los objetos como solo lectura basada en Object.Seal (). Al igual que las operaciones de Object.Seal () y Object.PreventExtensions (), Object.Freeze () no tiene anti-operación, por lo que el objeto no se puede restaurar una vez que está congelado. En JavaScript, puede usar Object.Isfrozen () para consultar si un objeto ha sido congelado.
La copia del código es la siguiente:
console.log (object.issealed (o)); // falso
Object.Seal (O);
console.log (object.issealed (o)); // verdadero
console.log (object.IsfRozen (o)); // falso
Object.freeze (O);
console.log (object.isfrozen (o)); // verdadero
Ya sea object.preventextensions (), object.seal () y object.freeze (), su alcance de acción es el objeto en sí, y el objeto prototipo del objeto no se verá afectado.