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
}
Copier après la connexion
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)
Copier après la connexion
- 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'));
Copier après la connexion
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);
Copier après la connexion
- 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)
Copier après la connexion
- 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);
Copier après la connexion
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);
Copier après la connexion
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});
Copier après la connexion
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));
Copier après la connexion
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;
Copier après la connexion
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;
Copier après la connexion
防篡改
定义的对象默认在任何时候、任何位置,无论有意义的还是无意义的都可以修改对象的属性或方法。
而这些篡改可能会影响对象的内置属性或方法,从而导致对象的正常功能可能无法使用。
1.禁止扩展:禁止为对象扩展新的属性或方法
var obj={};
Object.preventExtensions(obj);
obj.attr='前端';
console.log(Object.isExtensible(obj));
console.log(obj.attr);
Copier après la connexion
2.密封对象:禁止扩展新的属性或方法,禁止配置现有的属性或方法的描述符,仅允许读写属性的值
var sealed={};
Object.seal(sealed);
Object.isSealed(sealed);
Object.isExtensible(sealed);
Copier après la connexion
3.冻结对象:禁止对对象执行任何修改操作
var frozen={1:81};
Object.isFrozen(frozen);
Object.freeze(frozen);
Object.isFrozen(frozen);
Object.isSealed(frozen);
Object.isExtensible(frozen);
Copier après la connexion
相关推荐:
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!