Dans JavaScript, les objets sont définis comme «une collection d'attributs non ordonnés dont les propriétés peuvent contenir des valeurs, des objets ou des fonctions de base». En termes de laïque, nous pouvons comprendre les objets comme des ensembles de paires de valeurs de nom, où les valeurs peuvent être des données ou des fonctions.
Il existe généralement deux façons de créer un objet personnalisé. Le premier consiste à créer une instance d'un objet, puis à y ajouter des propriétés et des méthodes, telles que:
var personne = nouveau objet (); personne.name = "Scott"; personne.age = 24; personne.sayName = function () {alert (personne.name); }La deuxième méthode est la méthode littérale de l'objet. Il est généralement recommandé d'utiliser cette méthode pour créer des objets, par exemple:
var personne = {name: "Scott", âge: 24, SayName: function () {alert (this.name); }}Type d'attribut
Il existe deux propriétés différentes définies dans JavaScript: les propriétés de données et les propriétés accessoires. Les attributs de données sont généralement utilisés pour stocker les valeurs de données, tandis que les attributs d'accessoires effectuent généralement des opérations GET / SET et ne peuvent pas stocker directement les valeurs de données. Dans ES5, nous définissons les attributs pour décrire diverses caractéristiques des propriétés. Dans JavaScript, nous ne pouvons pas accéder directement à la fonctionnalité, nous l'avons donc mis en deux paires de crochets, tels que [[enUMableable]].
• Propriétés des données
Les attributs de données décrivent principalement leur comportement:
1. [[Configurable]]: la valeur par défaut est vraie. Indique si l'attribut peut être supprimé pour redéfinir l'attribut, si les caractéristiques d'attribut peuvent être modifiées, ou si l'attribut peut être modifié à l'attribut accessor;
2. [[Énumérable]]: la valeur par défaut est vraie. Indique si l'attribut peut être retourné via la boucle for-in;
3. [[Écrivable]]: la valeur par défaut est vraie. Indique si la valeur de l'attribut peut être modifiée.
4. [[Valeur]]: La valeur par défaut n'est pas définie. Représente la valeur de données contenant l'attribut. Les valeurs d'attribut de lecture et d'écriture sont effectuées à partir de cette position.
Pour les propriétés définies ci-dessus directement sur l'objet Person, leurs propriétés [[configurables]], [[énumérables]] et [[écrivatives]] sont définies sur TRUE par défaut, tandis que les propriétés [[valeur]] sont définies sur une valeur spécifique. Si vous souhaitez modifier les propriétés par défaut d'une propriété, vous pouvez utiliser la méthode object.defineProperty () fournie par ES5. Cette méthode reçoit trois paramètres: l'objet où se trouve la propriété, le nom de la propriété et un objet descripteur. Un objet descripteur ne peut contenir qu'une ou plusieurs des quatre caractéristiques ci-dessus. Les exemples sont les suivants:
var person = {name: "Scott"} object.defineproperty (personne, "name", {writeable: false;}) console.log (personne.name); // "Scott" Person.name = "Evan"; console.log (personne.Name); // "Scott"Définissez la propriété écrivative de l'attribut de nom d'objet de la personne à false. La valeur de cet attribut n'est pas modifié, de sorte que le fonctionnement de la copie de cet attribut sera ignoré directement.
var personne = {name: "Scott"} object.defineproperty (personne, "nom", {configurable: false;}) console.log (personne.name); // "Scott" Supprimer la personne.name; console.log (personne.Name); // "Scott"On peut voir que lorsque la valeur de propriété configurable de l'attribut de nom est définie sur False, cela signifie que l'attribut ne peut pas être supprimé de l'objet. Mais il convient de noter que lorsqu'une propriété est définie comme non configurable, elle ne peut pas être transformée en configurable. À l'heure actuelle, la modification d'autres fonctionnalités autres que Writable provoquera une erreur, par exemple:
var person = {name: "Scott"} object.defineproperty (personne, "name", {configurable: false;}) object.defineproperty (personne, "name", {configurable: true; // une erreur sera lancée ici})C'est-à-dire qu'après avoir modifié la fonctionnalité configurable en false, il y aura des restrictions lors de la modification d'autres fonctionnalités.
• Propriétés accessoires
L'attribut accessor ne contient pas de valeurs de données. Il contient une paire de fonctions Getter et Setter. Lorsque l'attribut accessor est lu, la fonction Getter est appelée et la valeur valide est renvoyée; Lorsque l'attribut accessor est écrit, la fonction de setter est appelée et la nouvelle valeur est réalisée, et la fonction de setter est responsable du traitement des données. Cette propriété a quatre caractéristiques:
1. [[Configurable]]: la valeur par défaut est vraie. Indique si l'attribut peut être supprimé pour redéfinir l'attribut, si les caractéristiques d'attribut peuvent être modifiées, ou si l'attribut peut être modifié à l'attribut accessor;
2. [[Énumérable]]: la valeur par défaut est vraie. Indique si l'attribut peut être retourné via la boucle for-in;
3. [[GET]]: La fonction appelée lors des attributs de lecture, par défaut n'est pas défini;
4. [[Set]]: La fonction appelée lors des attributs d'écriture, par défaut n'est pas défini.
Les propriétés accessoires ne peuvent pas être définies directement, elles doivent être définies via la fonction object.defineProperty (), par exemple:
var personne = {_name: "Scott", _age: 24, _tel: 86247}; // L'attribut de nom est un objet en lecture seule.defineProperty (personne, "nom", {get: function () {return this._name;}}); // L'attribut d'âge est un objet d'écriture uniquement.defineproperty (personne, "âge", {set: function (p) {this._age = p;}}); // L'attribut tel est en lecture seule objet.defineProperty (personne, "tel", {get: function () {return this._tel;}, set: function (p) {this._tel = p;}}); console.log (personne.Name); // "Scott" Person.name = "Evan"; console.log (personne.Name); // "Scott", la modification de l'attribut de nom est invalid.console.log (personne.age); // non défini, l'attribut illisible Person.age = 25; console.log (Person._age); // 25, la console.log (personne.tel); // "86247", l'attribut lisible personne.tel = "13975"; Console.log (Person.tel); // "13975", la modification peut être apportéeLe soulignement avant l'attribut indique un attribut qui ne peut être accessible que via la méthode de l'objet. Lorsque nous utilisons Person.name, nous appelons réellement la fonction Getter de l'attribut de nom, et lorsque nous attribuons une valeur à Person.name, nous appelons la fonction de setter de l'attribut de nom, de sorte que la relation entre l'attribut et l'accessoire est très claire.
Définir plusieurs attributs
En fait, ES5 nous fournit une méthode pour définir plusieurs propriétés pour un objet, à savoir objet.defineProperties (). Cette fonction reçoit deux paramètres, l'objet où se trouve la propriété et l'objet composé des attributs qui doivent être modifiés et de ses objets descripteurs. Par exemple, modifiez l'exemple ci-dessus pour définir plusieurs propriétés à la fois, comme suit:
var personne = {_name: "Scott", _age: 24, _tel: 86247}; Object.defineProperties (personne, {name: {get: function () {return this._name;}}, âge: {set: function (p) {this._age = p;}}, tel: {get: function () {return this._tel;}, set: function (p) {this._tel = p;}}}});Lire les propriétés
ES5 fournit la méthode object.getownpropertydescripter () pour obtenir le descripteur d'une propriété donnée. Cette méthode reçoit deux paramètres: l'objet où réside l'attribut et le nom d'attribut de son descripteur à lire. Le résultat renvoie un objet. S'il s'agit d'un attribut accessor, les objets retournés incluent la configuration, énumérable, get et set; S'il s'agit d'un attribut de données, les propriétés de l'objet retourné incluent la configuration, l'énumérable, la valeur scrupuleuse et la valeur. Pour l'exemple ci-dessus, utilisez ce qui suit:
var personne = {_name: "Scott", _age: 24, _tel: 86247}; Object.defineProperties (personne, {name: {get: function () {return this._name;}}, âge: {set: function (p) {this._age = p;}}, tel: {get: function () {return this._tel;}, set: function (p) {this._tel = p;}}}}); var describer = object.getownPropertyDescripter (personne, "tel"); Console.log (Descripter.Value); // Console non défini.log (Descripter.Enumerable); // false console.log (typeof Descriner.get); //"fonction"Le code ci-dessus obtient la propriété Tel de l'objet de personne. Puisqu'il s'agit d'une propriété d'accessoire, sa valeur n'est pas définie, l'énumérable est faux et Get est un pointeur vers la fonction Getter.
L'article ci-dessus traite brièvement des attributs de données JavaScript et des attributs d'accessoires est tout le contenu que j'ai partagé avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.