No JavaScript, a propriedade extensível do objeto é usada para indicar se novas propriedades podem ser adicionadas dinamicamente no objeto. No padrão ECMAScript 3, todos os objetos são extensíveis. No padrão ECMAScript 5, todos os objetos ainda são extensíveis por padrão, mas essa propriedade pode ser alterada por configuração.
Para verificar se um objeto é extensível, você pode usar a instrução Object.isExtensible ():
A cópia do código é a seguinte:
var o = {x: 1};
console.log (object.isextensible (o)); // true
Para criar um objeto que não seja extensível, você pode usar a instrução Object.PreventExtensions ():
A cópia do código é a seguinte:
Object.PreventExtensions (O)
console.log (object.isextensible (o)); // false
Vale ressaltar que, como não há declaração de operação inversa do objeto.PreventExtensions (), uma vez que um objeto é definido como não extensível, não há como defini-lo para estender novamente.
O escopo da instrução Object.PreventExtensions () é o próprio objeto e o objeto de protótipo não é afetado. Se um objeto for definido como não extensível, as propriedades ainda poderão ser adicionadas dinamicamente em seu objeto protótipo, e essas propriedades adicionadas dinamicamente ainda poderão ser herdadas pelo objeto.
Object.Seal () e Object.Freeze ()
Object.PreventExtensions () impede que novas propriedades sejam adicionadas dinamicamente em objetos. Além desta operação, existem mais duas operações rigorosas no JavaScript para proteger objetos: object.seal () e object.freeze ().
A função do object.Seal () é definir a propriedade configurável da propriedade de todos os objetos como false com base no object.preventExtensions (). Como a operação Object.PreventExtensions (), Object.Seal () não possui anti-operação, portanto, o objeto não pode ser restaurado quando selar. No JavaScript, você pode usar object.iSiSealed () para consultar se um objeto foi selado.
A função do object.freeze () é definir a propriedade de todos os objetos como somente leitura com base no object.Seal (). Como as operações object.Seal () e Object.PreventExtensions (), object.freeze () não possui anti-operação, portanto, o objeto não pode ser restaurado quando estiver congelado. No JavaScript, você pode usar object.isfrozen () para consultar se um objeto foi congelado.
A cópia do código é a seguinte:
console.log (object.issealed (o)); // false
Object.seal (O);
console.log (object.issealed (o)); // true
console.log (object.isfrozen (o)); // false
Object.Freeze (O);
console.log (object.isfrozen (o)); // true
Se é object.PreventExtensions (), object.Seal () e object.freeze (), seu escopo de ação é o próprio objeto e o objeto de protótipo do objeto não será afetado.