Maison  >  Article  >  interface Web  >  Introduction aux propriétés extensibles des objets dans les compétences JavaScript_javascript

Introduction aux propriétés extensibles des objets dans les compétences JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:23:181177parcourir

En JavaScript, l'attribut extensible d'un objet est utilisé pour indiquer si de nouvelles propriétés peuvent être ajoutées dynamiquement à l'objet. Dans le standard ECMAScript 3, tous les objets sont extensibles. Dans la norme ECMAScript 5, tous les objets sont toujours extensibles par défaut, mais cet attribut peut être modifié en le définissant.

Pour demander si un objet est extensible, vous pouvez utiliser l'instruction Object.isExtensible() :


Copier le code Le code est le suivant :

var o = {x:1};
console.log(Object.isExtensible(o));//true


Pour rendre un objet non extensible, vous pouvez utiliser l'instruction Object.preventExtensions() :


Copier le code Le code est le suivant :

Objet.preventExtensions(o)
console.log(Object.isExtensible(o));//false


Il convient de noter que puisqu'il n'y a pas d'instruction d'opération inverse de Object.preventExtensions(), une fois qu'un objet est défini comme non extensible, il n'y a aucun moyen de le définir à nouveau comme extensible.

La portée de l'instruction Object.preventExtensions() est l'objet lui-même et l'objet prototype n'est pas affecté. Si un objet est défini comme non extensible, les propriétés peuvent toujours être ajoutées dynamiquement à 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.preventExtensions() peut empêcher l'ajout dynamique de nouvelles propriétés à l'objet. En plus de cette opération, il existe deux autres opérations plus strictes en JavaScript pour protéger les objets : Object.seal() et Object.freeze().

La fonction de Object.seal() est de définir la propriété configurable des propres propriétés de tous les objets sur false en fonction de Object.preventExtensions(). Comme l'opération Object.preventExtensions(), Object.seal() n'a pas d'opération inverse, donc une fois l'objet scellé, son état ne peut pas être restauré. En JavaScript, vous pouvez utiliser Object.isSealed() pour demander si un objet a été scellé.

La fonction de Object.freeze() est de définir les propriétés de tous les objets eux-mêmes en lecture seule en fonction de Object.seal(). Comme les opérations Object.seal() et Object.preventExtensions(), Object.freeze() n'a pas d'opération inverse, donc une fois l'objet gelé, son état ne peut pas être restauré. En JavaScript, vous pouvez utiliser Object.isFrozen() pour demander si un objet a été gelé.


Copier le code Le code est le suivant :

console.log(Object.isSealed(o));//false
Objet.seal(o);
console.log(Object.isSealed(o));//true
console.log(Object.isFrozen(o));//false
Objet.freeze(o);
console.log(Object.isFrozen(o));//true


Qu'il s'agisse de Object.preventExtensions(), Object.seal() et Object.freeze(), sa portée est l'objet lui-même et l'objet prototype de l'objet ne sera pas affecté.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn