Dans JavaScript, la propriété extensible de l'objet est utilisée pour indiquer si les nouvelles propriétés peuvent être ajoutées dynamiquement dans l'objet. Dans la norme ECMAScript 3, tous les objets sont extensibles. Dans la norme ECMAScript 5, tous les objets sont toujours extensibles par défaut, mais cette propriété peut être modifiée par définition.
Pour vérifier si un objet est extensible, vous pouvez utiliser l'instruction object.isextenible ():
La copie de code est la suivante:
var o = {x: 1};
console.log (object.isextenible (o)); // true
Pour créer un objet qui n'est pas extensible, vous pouvez utiliser l'instruction Object.PretenExtensions ():
La copie de code est la suivante:
Object.pretentextensions (o)
console.log (object.isextenible (o)); // false
Il convient de noter que comme il n'y a pas de déclaration de fonctionnement inverse de l'objet.PretenExtensions (), une fois qu'un objet est défini sur non extensible, il n'y a aucun moyen de le régler à nouveau.
La portée de l'instruction Object.PretenExtensions () est l'objet lui-même, et l'objet prototype n'est pas affecté. Si un objet est défini sur non extensible, les propriétés peuvent toujours être ajoutées dynamiquement dans son objet prototype, et ces propriétés ajoutées dynamiquement peuvent toujours être héritées par l'objet.
Object.seal () et object.freeze ()
Object.prevenExtensions () empêche les nouvelles propriétés d'être ajoutées dynamiquement dans les objets. En plus de cette opération, il existe deux opérations plus strictes dans JavaScript pour protéger les objets: object.seal () et objet.freeze ().
La fonction de Object.Seal () est de définir la propriété configurable de la propriété de tous les objets sur FALSE sur la base de Object.PrevenExtensions (). Comme l'opération object.preventextensions (), object.seal () n'a pas d'anti-opération, donc l'objet ne peut pas être restauré une fois qu'il scelle. Dans JavaScript, vous pouvez utiliser object.isseled () pour demander si un objet a été scellé.
La fonction de Object.Freeze () est de définir la propriété de tous les objets en lecture seule en fonction de l'objet.seal (). Comme les opérations object.seal () et objet.preventextensions (), object.freeze () n'a pas d'anti-opération, donc l'objet ne peut pas être restauré une fois qu'il est congelé. Dans JavaScript, vous pouvez utiliser object.isfrozen () pour demander si un objet a été gelé.
La copie de code est la suivante:
console.log (object.isseled (o)); // false
Object.seal (o);
console.log (object.isseled (o)); // true
console.log (object.isfrozen (o)); // false
Object.freeze (o);
console.log (object.isfrozen (o)); // true
Si c'est object.prevenExtensions (), object.seal () et object.freeze (), son étendue d'action est l'objet lui-même, et l'objet prototype de l'objet ne sera pas affecté.