Maison interface Web js tutoriel Programmation orientée objet Javascript (1) Encapsulation

Programmation orientée objet Javascript (1) Encapsulation

Jan 04, 2017 am 09:26 AM
面向对象

Programmation orientée objet Javascript (1) : Encapsulation

Auteur : Ruan Yifeng

Javascript est un langage basé sur les objets, et presque tout ce que vous rencontrez est un objet. Cependant, il ne s’agit pas d’un véritable langage de programmation orienté objet (POO) car sa syntaxe ne contient aucune classe.

Donc, si nous voulons encapsuler « propriété » et « méthode » dans un objet, ou même générer un objet instance à partir d'un objet prototype, que devons-nous faire ?

1. Le mode original de génération d'objets

Supposons que nous considérions le chat comme un objet, qui a deux attributs : « nom » et « couleur ».

var Cat = { 
    name : '', 
    color : '' 
  }
Copier après la connexion

Maintenant, nous devons générer deux objets instances basés sur cet objet prototype.

  var cat1 = {}; // 创建一个空对象 
    cat1.name = "大毛"; // 按照原型对象的属性赋值 
    cat1.color = "黄色"; 
  var cat2 = {}; 
    cat2.name = "二毛"; 
    cat2.color = "黑色";
Copier après la connexion

D'accord, c'est l'encapsulation la plus simple. Cependant, cette façon d'écrire présente deux inconvénients. Premièrement, si plus d'instances sont générées, il sera très difficile d'écrire. Deuxièmement, il n'y a aucun moyen de voir le lien entre les instances et le prototype.
2. Amélioration du mode original
On peut écrire une fonction pour résoudre le problème de duplication de code.

  function Cat(name,color){ 
    return { 
      name:name, 
      color:color 
    } 
  }
Copier après la connexion

Ensuite, générer un objet instance équivaut à appeler une fonction :

  var cat1 = Cat("大毛","黄色"); 
  var cat2 = Cat("二毛","黑色");
Copier après la connexion

Le problème avec cette méthode est toujours qu'il n'y a pas de connexion intrinsèque entre cat1 et cat2 et ne peut pas refléter Montrez qu’il s’agit d’instances du même objet prototype.
3. Modèle de constructeur
Afin de résoudre le problème de génération d'instances à partir d'objets prototypes, Javascript fournit un modèle de constructeur.
Le soi-disant « constructeur » est en fait une fonction ordinaire, mais la variable this est utilisée en interne. L'utilisation de l'opérateur new sur le constructeur générera une instance et la variable this sera liée à l'objet instance.
Par exemple, l'objet prototype de cat peut maintenant être écrit comme ceci,

  function Cat(name,color){ 
    this.name=name; 
    this.color=color; 
  }
Copier après la connexion

Nous pouvons maintenant générer des objets instances.

  var cat1 = new Cat("大毛","黄色"); 
  var cat2 = new Cat("二毛","黑色"); 
  alert(cat1.name); // 大毛 
  alert(cat1.color); // 黄色
Copier après la connexion

À ce stade, cat1 et cat2 contiendront automatiquement un attribut constructeur pointant vers leur constructeur.

  alert(cat1.constructor == Cat); //true 
  alert(cat2.constructor == Cat); //true
Copier après la connexion

Javascript fournit également un opérateur instanceof pour vérifier la relation entre les objets prototypes et les objets instance.

  alert(cat1 instanceof Cat); //true 
  alert(cat2 instanceof Cat); //true
Copier après la connexion

4. Problèmes avec le modèle de constructeur
La méthode constructeur est facile à utiliser, mais il y a un problème de gaspillage de mémoire.
Veuillez voir, nous ajoutons maintenant un attribut immuable "type" (type) à l'objet Cat, puis ajoutons une méthode eat (manger des souris). Ensuite, l'objet prototype Cat devient le suivant :

  function Cat(name,color){ 
    this.name = name; 
    this.color = color; 
    this.type = "猫科动物"; 
    this.eat = function(){alert("吃老鼠");}; 
  }
Copier après la connexion

Utilisez toujours la même méthode pour générer une instance :

  var cat1 = new Cat("大毛","黄色"); 
  var cat2 = new Cat ("二毛","黑色"); 
  alert(cat1.type); // 猫科动物 
  cat1.eat(); // 吃老鼠
Copier après la connexion

En apparence, il ne semble y avoir aucun problème, mais en fait, cela présente un gros inconvénient. Autrement dit, pour chaque objet instance, l'attribut type et la méthode eat() ont exactement le même contenu. Chaque fois qu'une instance est générée, elle doit occuper plus de mémoire pour le contenu répété. Ce n’est ni écologique ni efficace.
 alert(cat1.eat == cat2.eat); //false
L'attribut type et la méthode eat() peuvent-ils être générés une seule fois en mémoire, puis toutes les instances pointent vers cette adresse mémoire ? La réponse est oui.
5. Mode prototype
Javascript stipule que chaque constructeur possède un attribut prototype qui pointe vers un autre objet. Toutes les propriétés et méthodes de cet objet seront héritées par l'instance du constructeur.
Cela signifie que nous pouvons définir ces propriétés et méthodes immuables directement sur l'objet prototype.

  function Cat(name,color){ 
    this.name = name; 
    this.color = color; 
  } 
  Cat.prototype.type = "猫科动物"; 
  Cat.prototype.eat = function(){alert("吃老鼠")};
Copier après la connexion

Ensuite, générez l'instance.

  var cat1 = new Cat("大毛","黄色"); 
  var cat2 = new Cat("二毛","黑色"); 
  alert(cat1.type); // 猫科动物 
  cat1.eat(); // 吃老鼠
Copier après la connexion

À l'heure actuelle, l'attribut type et la méthode eat() de toutes les instances sont en fait la même adresse mémoire, pointant vers l'objet prototype, améliorant ainsi l'efficacité opérationnelle.
 alert(cat1.eat == cat2.eat); //true
6. Méthode de vérification du mode prototype
6.1 isPrototypeOf()
Cette méthode est utilisée pour déterminer si un certain objet proptotype et un certaine relation entre les instances.

  alert(Cat.prototype.isPrototypeOf(cat1)); //true 
  alert(Cat.prototype.isPrototypeOf(cat2)); //true
Copier après la connexion

6.2 hasOwnProperty()
Chaque objet instance possède une méthode hasOwnProperty(), qui est utilisée pour déterminer si une certaine propriété est une propriété locale ou une propriété héritée de l'objet prototype.

  alert(cat1.hasOwnProperty("name")); // true 
  alert(cat1.hasOwnProperty("type")); // false
Copier après la connexion

6.3 Opérateur in L'opérateur
in peut être utilisé pour déterminer si une instance contient un certain attribut, s'il s'agit d'un attribut local ou non. L'opérateur

  alert("name" in cat1); // true 
  alert("type" in cat1); // true
Copier après la connexion

in peut également être utilisé pour parcourir toutes les propriétés d'un objet.
 for(var prop in cat1) { alert("cat1[" prop "]=" cat1[prop]);


Plus de programmation orientée objet Javascript (1) Pour les articles liés à l'encapsulation, veuillez faire attention au site Web PHP chinois !


Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment implémenter une programmation événementielle orientée objet à l'aide du langage Go Comment implémenter une programmation événementielle orientée objet à l'aide du langage Go Jul 20, 2023 pm 10:36 PM

Comment utiliser le langage Go pour implémenter une programmation événementielle orientée objet Introduction : Le paradigme de programmation orientée objet est largement utilisé dans le développement de logiciels, et la programmation événementielle est un modèle de programmation courant qui réalise le flux du programme à travers le déclenchement et le traitement de contrôle des événements. Cet article présentera comment implémenter une programmation événementielle orientée objet à l'aide du langage Go et fournira des exemples de code. 1. Le concept de programmation événementielle La programmation événementielle est un modèle de programmation basé sur des événements et des messages, qui transfère le contrôle du flux du programme au déclenchement et au traitement des événements. en mode événementiel

Quelle est l'importance de l'annotation @JsonIdentityInfo utilisant Jackson en Java ? Quelle est l'importance de l'annotation @JsonIdentityInfo utilisant Jackson en Java ? Sep 23, 2023 am 09:37 AM

L'annotation @JsonIdentityInfo est utilisée lorsqu'un objet a une relation parent-enfant dans la bibliothèque Jackson. L'annotation @JsonIdentityInfo est utilisée pour indiquer l'identité de l'objet lors de la sérialisation et de la désérialisation. ObjectIdGenerators.PropertyGenerator est une classe d'espace réservé abstraite utilisée pour représenter les situations dans lesquelles l'identifiant d'objet à utiliser provient d'une propriété POJO. Syntaxe@Target(value={ANNOTATION_TYPE,TYPE,FIELD,METHOD,PARAMETER})@Retention(value=RUNTIME)public

Explorez la programmation orientée objet dans Go Explorez la programmation orientée objet dans Go Apr 04, 2024 am 10:39 AM

Le langage Go prend en charge la programmation orientée objet via la définition de type et l'association de méthodes. Il ne prend pas en charge l'héritage traditionnel, mais est mis en œuvre par composition. Les interfaces assurent la cohérence entre les types et permettent de définir des méthodes abstraites. Des cas pratiques montrent comment utiliser la POO pour gérer les informations client, notamment la création, l'obtention, la mise à jour et la suppression d'opérations client.

Analyse du modèle Flyweight dans la programmation orientée objet PHP Analyse du modèle Flyweight dans la programmation orientée objet PHP Aug 14, 2023 pm 05:25 PM

Analyse du modèle Flyweight dans la programmation orientée objet PHP Dans la programmation orientée objet, le modèle de conception est une méthode de conception logicielle couramment utilisée, qui peut améliorer la lisibilité, la maintenabilité et l'évolutivité du code. Le modèle Flyweight est l’un des modèles de conception qui réduit la surcharge de mémoire en partageant des objets. Cet article explique comment utiliser le mode poids mouche en PHP pour améliorer les performances du programme. Qu’est-ce que le mode poids mouche ? Le modèle de poids mouche est un modèle de conception structurelle dont le but est de partager le même objet entre différents objets.

Analyse des fonctionnalités orientées objet du langage Go Analyse des fonctionnalités orientées objet du langage Go Apr 04, 2024 am 11:18 AM

Le langage Go prend en charge la programmation orientée objet, définissant des objets via des structures, définissant des méthodes à l'aide de récepteurs de pointeurs et implémentant le polymorphisme via des interfaces. Les fonctionnalités orientées objet assurent la réutilisation, la maintenabilité et l'encapsulation du code dans le langage Go, mais il existe également des limitations telles que le manque de concepts traditionnels de classes et d'héritage et de conversions de signatures de méthodes.

Fonctionnalités avancées PHP : meilleures pratiques en matière de programmation orientée objet Fonctionnalités avancées PHP : meilleures pratiques en matière de programmation orientée objet Jun 05, 2024 pm 09:39 PM

Les meilleures pratiques de POO en PHP incluent les conventions de dénomination, les interfaces et les classes abstraites, l'héritage et le polymorphisme, ainsi que l'injection de dépendances. Les cas pratiques incluent : l'utilisation du mode entrepôt pour gérer les données et l'utilisation du mode stratégie pour mettre en œuvre le tri.

Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Mar 19, 2024 pm 02:51 PM

Il n'y a pas de concept de classe au sens traditionnel dans Golang (langage Go), mais il fournit un type de données appelé structure, à travers lequel des fonctionnalités orientées objet similaires aux classes peuvent être obtenues. Dans cet article, nous expliquerons comment utiliser les structures pour implémenter des fonctionnalités orientées objet et fournirons des exemples de code concrets. Définition et utilisation des structures Examinons d'abord la définition et l'utilisation des structures. Dans Golang, les structures peuvent être définies via le mot-clé type, puis utilisées si nécessaire. Les structures peuvent contenir des attributs

Compréhension approfondie de la programmation orientée objet PHP : techniques de débogage pour la programmation orientée objet Compréhension approfondie de la programmation orientée objet PHP : techniques de débogage pour la programmation orientée objet Jun 05, 2024 pm 08:50 PM

En maîtrisant le suivi de l'état des objets, la définition de points d'arrêt, le suivi des exceptions et l'utilisation de l'extension xdebug, vous pouvez déboguer efficacement le code de programmation orienté objet PHP. 1. Suivez l'état de l'objet : utilisez var_dump() et print_r() pour afficher les attributs de l'objet et les valeurs des méthodes. 2. Définir un point d'arrêt : définissez un point d'arrêt dans l'environnement de développement et le débogueur se mettra en pause lorsque l'exécution atteint le point d'arrêt, ce qui facilitera la vérification de l'état de l'objet. 3. Tracez les exceptions : utilisez les blocs try-catch et getTraceAsString() pour obtenir la trace de la pile et le message lorsque l'exception se produit. 4. Utilisez le débogueur : La fonction xdebug_var_dump() peut inspecter le contenu des variables pendant l'exécution du code.

See all articles