Maison interface Web js tutoriel Introduction détaillée aux différentes méthodes d'héritage JavaScript et à leurs avantages et inconvénients

Introduction détaillée aux différentes méthodes d'héritage JavaScript et à leurs avantages et inconvénients

May 14, 2017 am 10:12 AM

Cet article présente principalement les différentes manières, avantages et inconvénients d'une compréhension approfondie de l'héritage JavaScript . Les amis intéressés peuvent s'y référer

.

Écrit devant

Cet article explique les différentes méthodes d'héritage ainsi que les avantages et les inconvénients de JavaScript.

Remarque :

est identique à "JavaScript en profondeur Création d'objets", plutôt comme des notes.

Hé, laissez-moi soupirer encore : "JavaScript Advanced Programming" est vraiment bien écrit !

1. Héritage de chaîne de prototypes

function Parent () {
  this.name = 'kevin';
}

Parent.prototype.getName = function () {
  console.log(this.name);
}

function Child () {

}

Child.prototype = new Parent();

var child1 = new Child();

console.log(child1.getName()) // kevin
Copier après la connexion

Problème :

1.références attributs< de type 🎜> est partagé par toutes les instances, par exemple :

function Parent () {
  this.names = [&#39;kevin&#39;, &#39;daisy&#39;];
}

function Child () {

}

Child.prototype = new Parent();

var child1 = new Child();

child1.names.push(&#39;yayu&#39;);

console.log(child1.names); // ["kevin", "daisy", "yayu"]

var child2 = new Child();

console.log(child2.names); // ["kevin", "daisy", "yayu"]
Copier après la connexion
2. Lors de la création d'une instance de Child, les paramètres ne peuvent pas être transmis au Parent

2. > Fonction de construction (héritage classique)

function Parent () {
  this.names = [&#39;kevin&#39;, &#39;daisy&#39;];
}

function Child () {
  Parent.call(this);
}

var child1 = new Child();

child1.names.push(&#39;yayu&#39;);

console.log(child1.names); // ["kevin", "daisy", "yayu"]

var child2 = new Child();

console.log(child2.names); // ["kevin", "daisy"]
Copier après la connexion
Avantages :

1. Évite que les attributs de type référence soient partagés par toutes les instances

.

2. Vous pouvez passer des paramètres à Parent in Child

Par exemple :

Inconvénients :
function Parent (name) {
  this.name = name;
}

function Child (name) {
  Parent.call(this, name);
}

var child1 = new Child(&#39;kevin&#39;);

console.log(child1.name); // kevin

var child2 = new Child(&#39;daisy&#39;);

console.log(child2.name); // daisy
Copier après la connexion

Les méthodes sont définies dans le constructeur, à chaque fois qu'elles sont Les instances créées seront créées une seule fois.

3. Héritage combiné


L'héritage de chaîne prototype et l'héritage classique sont deux épées combinées.

Avantages : Combinant les avantages de l'héritage de chaîne de prototypes et des constructeurs, il s'agit du modèle d'héritage le plus couramment utilisé en JavaScript.
function Parent (name) {
  this.name = name;
  this.colors = [&#39;red&#39;, &#39;blue&#39;, &#39;green&#39;];
}

Parent.prototype.getName = function () {
  console.log(this.name)
}

function Child (name, age) {

  Parent.call(this, name);
  
  this.age = age;

}

Child.prototype = new Parent();

var child1 = new Child(&#39;kevin&#39;, &#39;18&#39;);

child1.colors.push(&#39;black&#39;);

console.log(child1.name); // kevin
console.log(child1.age); // 18
console.log(child1.colors); // ["red", "blue", "green", "black"]

var child2 = new Child(&#39;daisy&#39;, &#39;20&#39;);

console.log(child2.name); // daisy
console.log(child2.age); // 20
console.log(child2.colors); // ["red", "blue", "green"]
Copier après la connexion

4. L'héritage prototypique

est l'implémentation simulée d'ES5
function createObj(o) {
  function F(){}
  F.prototype = o;
  return new F();
}
Copier après la connexion
Object

.create, utilisant l'objet entrant comme prototype d'objet créé. . Inconvénients :

Les valeurs d'attribut contenant des types de référence partageront toujours la valeur correspondante, ce qui est la même que l'héritage de chaîne de prototype.

Remarque : lorsque la valeur de
var person = {
  name: &#39;kevin&#39;,
  friends: [&#39;daisy&#39;, &#39;kelly&#39;]
}

var person1 = createObj(person);
var person2 = createObj(person);

person1.name = &#39;person1&#39;;
console.log(person2.name); // kevin

person1.firends.push(&#39;taylor&#39;);
console.log(person2.friends); // ["daisy", "kelly", "taylor"]
Copier après la connexion
est modifiée, la valeur de

ne change pas parce que person1.name et person2.name ont des valeurs de nom indépendantes, mais à cause de. person1 , en ajoutant une valeur de nom à person2, plutôt que de modifier la valeur de nom sur le prototype. person1.name = &#39;person1&#39;person1

5. Héritage parasite


Créer une fonction qui est uniquement utilisée pour encapsuler le processus d'héritage. Cette fonction améliorera l'objet sous une forme interne. l'objet est restitué.

Inconvénients : Comme le modèle de constructeur emprunté, une méthode est créée à chaque fois qu'un objet est créé.
function createObj (o) {
  var clone = object.create(o);
  clone.sayName = function () {
    console.log(&#39;hi&#39;);
  }
  return clone;
}
Copier après la connexion

6. Héritage combiné parasite


Pour la commodité de la lecture de chacun, le code de l'héritage combiné est répété ici :

Le plus gros inconvénient de l'héritage combiné est que le constructeur parent est appelé deux fois.
function Parent (name) {
  this.name = name;
  this.colors = [&#39;red&#39;, &#39;blue&#39;, &#39;green&#39;];
}

Parent.prototype.getName = function () {
  console.log(this.name)
}

function Child (name, age) {
  Parent.call(this, name);
  this.age = age;
}

Child.prototype = new Parent();

var child1 = new Child(&#39;kevin&#39;, &#39;18&#39;);

console.log(child1)
Copier après la connexion

Une fois lors de la définition du prototype d'une instance de sous-type :

Une fois lors de la création d'une instance de sous-type :
Child.prototype = new Parent();
Copier après la connexion

Rappelez l'implémentation de simulation de new , en fait , dans cette phrase, nous exécuterons :
var child1 = new Child(&#39;kevin&#39;, &#39;18&#39;);
Copier après la connexion

Ici, nous appellerons à nouveau le constructeur Parent.
Parent.call(this, name);
Copier après la connexion

Donc, dans cet exemple, si nous imprimons l'objet child1, nous constaterons que Child.prototype et child1 ont tous deux un attribut appelé couleurs, et la valeur de l'attribut est ['red', 'blue', ' vert'] .

Alors, comment pouvons-nous continuer à nous améliorer et éviter les appels répétés cette fois-ci ?

Et si nous n'utilisons pas Child.prototype = new Parent(), mais laissons indirectement Child.prototype accéder à Parent.prototype ?

Voyons comment l'implémenter :

Enfin nous encapsulons cette méthode d'héritage :
function Parent (name) {
  this.name = name;
  this.colors = ['red', 'blue', 'green'];
}

Parent.prototype.getName = function () {
  console.log(this.name)
}

function Child (name, age) {
  Parent.call(this, name);
  this.age = age;
}

// 关键的三步
var F = function () {};

F.prototype = Parent.prototype;

Child.prototype = new F();


var child1 = new Child(&#39;kevin&#39;, &#39;18&#39;);

console.log(child1);
Copier après la connexion

Citant l'héritage combiné parasite dans "JavaScript Advanced Programming" Le l'éloge est :
function object(o) {
  function F() {}
  F.prototype = o;
  return new F();
}

function prototype(child, parent) {
  var prototype = object(parent.prototype);
  prototype.constructor = child;
  child.prototype = prototype;
}

// 当我们使用的时候:
prototype(Child, Parent);
Copier après la connexion

La grande efficacité de cette méthode reflète le fait qu'elle n'appelle le constructeur Parent qu'une seule fois, et évite ainsi de créer des attributs inutiles et redondants sur Parent.prototype. Dans le même temps, la chaîne de prototypes reste inchangée ; par conséquent, instanceof et isPrototypeOf peuvent toujours être utilisés normalement. Les développeurs pensent généralement que l'héritage compositionnel parasite est le paradigme d'héritage le plus idéal pour les types de référence.

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 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.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

Explication détaillée de l'héritage des fonctions C++ : Comment utiliser le « pointeur de classe de base » et le « pointeur de classe dérivé » dans l'héritage ? Explication détaillée de l'héritage des fonctions C++ : Comment utiliser le « pointeur de classe de base » et le « pointeur de classe dérivé » dans l'héritage ? May 01, 2024 pm 10:27 PM

Dans l'héritage de fonction, utilisez le « pointeur de classe de base » et le « pointeur de classe dérivée » pour comprendre le mécanisme d'héritage : lorsque le pointeur de classe de base pointe vers l'objet de classe dérivé, une transformation ascendante est effectuée et seuls les membres de la classe de base sont accessibles. Lorsqu’un pointeur de classe dérivée pointe vers un objet de classe de base, une conversion vers le bas est effectuée (dangereuse) et doit être utilisée avec prudence.

A lire avant d'acheter un système : Analyse des avantages et inconvénients de Win11 et Win10 A lire avant d'acheter un système : Analyse des avantages et inconvénients de Win11 et Win10 Mar 28, 2024 pm 01:33 PM

À l'ère de l'information d'aujourd'hui, les ordinateurs personnels jouent un rôle important en tant qu'outil indispensable dans notre vie quotidienne. En tant que logiciel de base des ordinateurs, le système d'exploitation affecte notre expérience d'utilisation et notre efficacité au travail. Sur le marché, le système d'exploitation Windows de Microsoft a toujours occupé une position dominante, mais les gens sont désormais confrontés au choix entre le dernier Windows 11 et l'ancien Windows 10. Pour les consommateurs ordinaires, lorsqu'ils choisissent un système d'exploitation, ils ne regardent pas seulement le numéro de version, mais comprennent également ses avantages et ses inconvénients.

Quels sont les avantages et les inconvénients des modèles ? Quels sont les avantages et les inconvénients des modèles ? May 08, 2024 pm 03:51 PM

Modèles : avantages et inconvénients Le modèle est une technique de programmation puissante qui vous permet de créer des blocs de code réutilisables. Il présente de nombreux avantages, mais aussi certains inconvénients. Avantages : Réutilisabilité du code : les modèles vous permettent de créer du code commun qui peut être réutilisé dans toute votre application, réduisant ainsi les efforts de duplication et de maintenance. Cohérence : les modèles garantissent que les extraits de code sont implémentés de la même manière à différents endroits, améliorant ainsi la cohérence et la lisibilité du code. Maintenabilité : les modifications apportées à un modèle sont reflétées simultanément dans tout le code qui l'utilise, simplifiant ainsi la maintenance et les mises à jour. Efficacité : la création de modèles permet d'économiser du temps et des efforts, car vous n'avez pas besoin d'écrire le même code encore et encore. Flexibilité : les modèles vous permettent de créer des blocs de code configurables qui peuvent être facilement adaptés aux différents besoins des applications. défaut

Quels sont les avantages et les inconvénients du fonctionnement des servlets Java ? Quels sont les avantages et les inconvénients du fonctionnement des servlets Java ? Apr 16, 2024 pm 03:18 PM

JavaServlet est une classe Java utilisée pour créer des pages Web dynamiques et sert de pont entre le client et le serveur. Principe de fonctionnement : recevoir des requêtes, initialiser le Servlet, traiter les requêtes, générer des réponses et fermer le Servlet. Avantages : Portable, évolutif, sécurisé et facile à utiliser. Inconvénients : surcharge, couplage et gestion de l'état. Cas pratique : Créez un Servlet simple pour afficher le message "Bonjour, Servlet !"

Comparaison des avantages et inconvénients des frameworks PHP : Lequel est le meilleur ? Comparaison des avantages et inconvénients des frameworks PHP : Lequel est le meilleur ? Jun 04, 2024 pm 03:36 PM

Le choix du framework PHP dépend des besoins du projet et des compétences du développeur : Laravel : riche en fonctionnalités et en communauté active, mais a une courbe d'apprentissage abrupte et des frais généraux élevés en termes de performances. CodeIgniter : léger et facile à étendre, mais a des fonctionnalités limitées et moins de documentation. Symfony : Communauté modulaire et forte, mais problèmes de performances complexes. ZendFramework : de niveau entreprise, stable et fiable, mais volumineux et coûteux en licence. Slim : micro-framework, rapide, mais avec des fonctionnalités limitées et une courbe d'apprentissage abrupte.

Comment l'héritage et le polymorphisme affectent-ils le couplage de classes en C++ ? Comment l'héritage et le polymorphisme affectent-ils le couplage de classes en C++ ? Jun 05, 2024 pm 02:33 PM

L'héritage et le polymorphisme affectent le couplage des classes : l'héritage augmente le couplage car la classe dérivée dépend de la classe de base. Le polymorphisme réduit le couplage car les objets peuvent répondre aux messages de manière cohérente via des fonctions virtuelles et des pointeurs de classe de base. Les meilleures pratiques incluent l'utilisation de l'héritage avec parcimonie, la définition d'interfaces publiques, l'évitement de l'ajout de données membres aux classes de base et le découplage des classes via l'injection de dépendances. Un exemple pratique montrant comment utiliser le polymorphisme et l'injection de dépendances pour réduire le couplage dans une application de compte bancaire.

Langage C et Python : analyse des scénarios applicables et avantages et inconvénients Langage C et Python : analyse des scénarios applicables et avantages et inconvénients Mar 22, 2024 am 11:24 AM

Langage C et Python : analyse des scénarios applicables et avantages et inconvénients Dans le domaine de la programmation informatique, le langage C et Python sont deux langages de programmation très populaires. Ils présentent chacun des avantages et des inconvénients uniques et conviennent à différents scénarios. Cet article procédera à une analyse approfondie du langage C et de Python, discutant de leurs scénarios applicables, de leurs avantages et de leurs inconvénients. 1. Scénarios applicables du langage C : le langage C est un langage de programmation orienté processus avec une efficacité élevée et d'excellentes performances. Il convient au développement de logiciels système, de pilotes et de systèmes embarqués qui nécessitent un degré élevé de contrôle et d'efficacité.

Explication détaillée de l'héritage des fonctions C++ : Comment déboguer les erreurs d'héritage ? Explication détaillée de l'héritage des fonctions C++ : Comment déboguer les erreurs d'héritage ? May 02, 2024 am 09:54 AM

Conseils de débogage des erreurs d’héritage : assurez-vous que les relations d’héritage sont correctes. Utilisez le débogueur pour parcourir le code et examiner les valeurs des variables. Assurez-vous d'utiliser correctement le modificateur virtuel. Examinez le problème des diamants d'héritage causé par l'héritage caché. Recherchez les fonctions virtuelles pures non implémentées dans les classes abstraites.

See all articles