Maison >interface Web >js tutoriel >Que sont les objets Object en js ? Résumé de la façon d'utiliser les objets objets dans js

Que sont les objets Object en js ? Résumé de la façon d'utiliser les objets objets dans js

不言
不言original
2018-08-15 14:37:102946parcourir

Le contenu de cet article porte sur ce que sont les objets Object en js ? Ce résumé sur la façon d'utiliser les objets objets dans js a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Descripteur de propriété

JavaScript fournit une structure de données interne qui décrit la valeur d'un objet et contrôle son comportement, par exemple si la propriété est accessible en écriture, configurable, modifiable et si elle est énumérable, etc. Cette structure de données interne est appelée « descripteur d'attribut ».
Chaque attribut a son propre descripteur d'attribut correspondant, qui enregistre les méta-informations de l'attribut.

{
    value:'前端',
    writable:false,
    enumerable:true,
    configurable:false,
    get:undefined,
    set:undefined
}

Il existe actuellement deux formes principales de descripteurs d'attributs dans les objets : les descripteurs de données et les descripteurs d'accès.

Descripteurs de données

Les descripteurs de données sont une propriété avec une valeur qui peut être ou non inscriptible. Le descripteur de données a les valeurs clés facultatives suivantes :

  • value : La valeur correspondant à cet attribut peut être n'importe quelle valeur JavaScript valide (valeur numérique, objet, fonction, etc.). La valeur par défaut est indéfinie

  • inscriptible : lorsque l'écriture de l'attribut est vraie, la valeur peut être modifiée par l'opérateur d'affectation. La valeur par défaut est false

  • configurable : lorsque la valeur configurable de l'attribut est vraie, le descripteur de l'attribut peut être modifié et l'attribut peut également être supprimé de l'objet correspondant.

  • enumerable : Lorsque l'énumérable de l'attribut est vrai, l'attribut peut apparaître dans l'attribut d'énumération de l'objet. La valeur par défaut est false

Descripteur d'accès

Le descripteur d'accès est une propriété décrite par une paire de fonctions getter-setter. Le descripteur d'accès a les valeurs de clé facultatives suivantes :

  • get : Fournit une méthode getter pour la propriété. S'il n'y a pas de getter, elle n'est pas définie. Lors de l'accès à la propriété, la méthode sera exécutée. Aucun paramètre n'est transmis lors de l'exécution de la méthode, mais cet objet sera transmis.

  • set : Fournit une méthode setter pour le propriété, s'il n'y a pas de setter, elle n'est pas définie. Cette méthode est déclenchée lorsque la valeur de la propriété est modifiée. Cette méthode acceptera le seul paramètre, qui est la nouvelle valeur du paramètre de la propriété.

  • configurable : lorsque la valeur configurable de l'attribut est vraie, le descripteur de l'attribut peut être modifié et l'attribut peut également être supprimé de l'objet correspondant. La valeur par défaut est fausse

    .
  • enumerable : Lorsque l'énumérable de l'attribut est vrai, l'attribut peut apparaître dans l'attribut d'énumération de l'objet. La valeur par défaut est fausse.

Obtenir le descripteur de propriété

La méthode Object.getOwnPropertyDescriptor() renvoie le descripteur de propriété correspondant à une propre propriété sur l'objet spécifié.

Object.getOwnPropertyDescriptor(obj,prop)
  • obj : l'objet cible qui doit être trouvé

  • prop : le nom de la propriété dans l'objet cible (type String)

  • Valeur de retour : Si la propriété spécifiée existe sur l'objet, renvoie son objet descripteur de propriété, sinon renvoie undéfini

var obj={}
obj.attr='前端';

console.log(Object.getOwnPropertyDescriptor(obj,'attr'));
Définir la propriété descriptor

1. La méthode Object.defineProperty() définit de nouvelles propriétés ou modifie les propriétés existantes de l'objet, et renvoie l'objet

Object.defineProperty(obj,prop,descriptor);
  • obj: à être défini dessus L'objet de la propriété

  • prop : Le nom de la propriété à définir ou à modifier

  • descripteur : L'objet qui sera être passé à la fonction

  • Valeur de retour : l'objet passé à la fonction

2 La méthode Object.defineProperties() définit un ou plus de nouvelles propriétés pour l'objet ou modifie les propriétés existantes , et renvoie l'objet

Object.defineProperties(obj,props)
  • obj : l'objet sur lequel les propriétés doivent être définies

  • props : l'énumérable sur lequel définir L'objet de la propriété ou le descripteur de propriété modifié

  • Valeur de retour : L'objet passé à la fonction

Valeur clé optionnelle du descripteur de propriété

1.value : Indique la valeur correspondant à l'attribut cible. Il peut s'agir de n'importe quelle valeur JavaScript valide (valeur numérique, objet, fonction, etc.). La valeur par défaut est indéfinie

var obj={};
obj.name='张三';

var attr=Object.getOwnPropertyDescriptor(obj,'name');
console.log(attr.value);

Object.defineProperty(obj,'name',{value:'李四'});
console.log(obj.name);
2.writable:Valeur booléenne, indiquant si la valeur de l'attribut cible peut être modifiée. Lorsque l'attribut inscriptible est vrai, la valeur peut être modifiée par l'opérateur d'affectation. La valeur par défaut est false

var obj={};
Object.defineProperty(obj,'attr',{
       value:'前端',
       writable:false
});
console.log(obj.attr);
obj.attr=100;
console.log(obj.attr);
3. configurable : valeur booléenne, indiquant si le descripteur de l'attribut cible peut être modifié. Lorsque la valeur configurable de l'attribut est vraie, le descripteur d'attribut peut être modifié et l'attribut peut également être supprimé de l'objet correspondant. La valeur par défaut est false

var obj=Object.definePropety({},'attr',{
    value:'大前端',
    configurable:false
});

Object.definePropety(obj,'attr',{value:100});
Object.definePropety(obj,'attr',{writable:true});
Object.definePropety(obj,'attr',{enumerable:true});
Object.definePropety(obj,'attr',{configurable:true});
4.enumerable : valeur booléenne, indiquant si l'attribut cible peut être traversé. Lorsque l'énumérable de la propriété est vrai, la propriété peut apparaître dans la propriété d'énumération de l'objet. La valeur par défaut est false

Si la valeur énumérable de l'attribut de l'objet est fausse, les trois opérations suivantes ne peuvent pas obtenir l'attribut :

  • for...in instruction

  • Méthode Object.keys()

  • Méthode JSON.stringify()

var obj={};
Object.defineProperty(obj,'attr',{value:'前端',enumerable:false});
for(var key in obj){console.log(key);}
console.log(Object.keys(obj));
console.log(JSON.stringify(obj));
descripteur d'attribut Accesseur

En plus d'être définies directement, les propriétés d'un objet peuvent également être définies à l'aide d'accesseurs. Parmi eux, setter est une fonction de sauvegarde de valeur, utilisez set dans le descripteur d'attribut ; getter est une fonction de prise de valeur, utilisez get

var obj=Object.defineProperty({},'attr',{
    get:function(){
        return '前端';
    },
    set:function(){
        console.log('setter:'+value);
    }
});

console.log(obj.attr);
obj.attr=100;
en plus de la méthode d'écriture d'accesseur ci-dessus. , JavaScript également Les méthodes d'écriture suivantes sont fournies :

var obj={
    get attr(){
        return '前端';
    },
    set attr(value){
        console.log('setter:'+value);
    }
}

console.log(obj.attr);
obj.attr=100;

防篡改

定义的对象默认在任何时候、任何位置,无论有意义的还是无意义的都可以修改对象的属性或方法。
而这些篡改可能会影响对象的内置属性或方法,从而导致对象的正常功能可能无法使用。
1.禁止扩展:禁止为对象扩展新的属性或方法

var obj={};
Object.preventExtensions(obj);
obj.attr='前端';
console.log(Object.isExtensible(obj));
console.log(obj.attr);

2.密封对象:禁止扩展新的属性或方法,禁止配置现有的属性或方法的描述符,仅允许读写属性的值

var sealed={};
Object.seal(sealed);
Object.isSealed(sealed);

Object.isExtensible(sealed);

3.冻结对象:禁止对对象执行任何修改操作

var frozen={1:81};
Object.isFrozen(frozen);
Object.freeze(frozen);
Object.isFrozen(frozen);

Object.isSealed(frozen);
Object.isExtensible(frozen);

相关推荐:

JS中Object对象的原型的使用方法

js如何打印object对象_javascript技巧

详解JavaScript中的Object对象 的示例代码

浅谈Javascript中Object与Function对象_javascript技巧

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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