Maison > interface Web > js tutoriel > le corps du texte

Explication détaillée des connaissances en héritage dans js

小云云
Libérer: 2018-03-28 16:23:11
original
1301 Les gens l'ont consulté

Dans cet article, nous partageons principalement avec vous l'explication détaillée des connaissances en héritage en js, principalement sous forme de texte et de code, en espérant aider tout le monde.

  1. Comprendre la relation entre les constructions, les instances et les prototypes. Les prototypes des constructions et des instances pointent vers des prototypes, et le constructeur de prototypes pointe vers des constructeurs

  2. sous-classes Il est nécessaire de réutiliser les méthodes et attributs de la classe parent

  3. Pointez le prototype construit par la sous-classe vers une instance de la classe parent, et la sous-classe peut accéder au attributs et méthodes de la classe parent à travers cette instance

  4. La progression de cette relation couche par couche forme une chaîne de prototypes

  • Implémentation

function Super(name) {
    this.name = "name";
    this.superproperty = true;
}
Super.prototype.getSuperName = function () {
    return this.name;
}
Super.prototype.getSuperproperty = function () {
    return this.superproperty;
}

function Sub(name) {
    this.name = name;
    this.subproperty = false;
}
//继承
Sub.prototype = new Super();
Sub.prototype.getSubName = function () {
    return this.name;
}
Sub.prototype.getSubproperty = function () {
    return this.subproperty;
}

var instance = new Sub("ctc");
console.log(instance.getSuperproperty());//true
console.log(instance.getSubproperty());//false
console.log(instance.getSuperName());//ctc
console.log(instance.getSubName());//ctc
Copier après la connexion

Les deux dernières sorties sont le processus de ctc. Lorsque l'instance rencontre l'opérateur ".", elle sera exécutée 1) Rechercher par exemple, 2) Rechercher sous. .prototype, 3) Recherchez super.prototype.

  • Problèmes d'attention

Objet prototype par défaut
Chaque instance a un objet prototype par défaut, donc le super.prototype à l'instant. pointe vers le prototype de l'objet

Devez-vous être prudent lors de la définition de

//继承
Sub.prototype = new Super();
Copier après la connexion

et l'écraser lors de l'héritage ? À qui le constructeur de sub.prototype désigne-t-il actuellement ?

Cette phrase doit être placée,

avant d'ajouter de nouvelles méthodes et de remplacer le code de la méthode

Sub.prototype.getSubName = function () {
    return this.name;
}
Sub.prototype.getSubproperty = function () {
    return this.subproperty;
}
Copier après la connexion
  • Inconvénients

Les attributs d'instance de la classe parent deviennent les attributs prototypes de la sous-classe et sont partagés en paramètres de passe de classe.

Constructeur d'emprunt

function Super(name) {
    this.name = name;
  
}
Super.prototype.getSuperName = function () {
    return this.name;
}


function Sub(name) {
Copier après la connexion
  Super.call(this,name);
Copier après la connexion
}//Inherit Sub.prototype = new Super();Sub.prototype.getSubName = function () { renvoie ce nom. ;}
this.name = name;
Copier après la connexion


Emprunte principalement le code de la structure Super pour implémenter la définition des propres attributs du sous

Mais écrite de cette manière, chaque instance peut avoir ses propres attributs et méthodes. , et en même temps, la réutilisabilité des fonctions de méthode est perdue

L'héritage combiné

est utilisé pour résoudre le problème de la réutilisation des méthodes

Utilisé dans le constructeur du parent class La construction dynamique de prototype ou construction combinée permet au constructeur d'avoir uniquement des définitions d'affectation d'attributs et des définitions de méthodes sur le prototype

Ensuite, dans la sous-classe, pointez le prototype de la sous-classe vers une instance de la classe parent du constructeur. une classe emprunte la structure de la classe parent, de sorte que chaque instance de la sous-classe ait ses propres attributs, mais les méthodes sont partagées.

function Super(name) {
    this.name = name;
    this.superproperty = true;
}
Super.prototype.getSuperName = function () {
    return this.name;
}

function Sub(name) {
    Super.call(this,arguments);
    this.name = name;
    this.subproperty = false;
}
//继承
Sub.prototype = new Super();
Copier après la connexion
Sub.prototype.getSubName = function () { return this.name;}var instance = new Sub("ctc");
// Sub.prototype.constructor = Sub;//如果此处未绑定,上一句重写了原型,Super的实例的constructor指向的自然是Super
Copier après la connexion

Héritage prototypique

Une autre implémentation de l'héritage, uniquement à l'aide de prototypes, de nouveaux objets peuvent être créés à partir d'objets existants

Compréhension : F est une fonction et un objet, et son prototype pointe vers l'objet () a accepté o, le F renvoyé est un objet dont le prototype pointe vers o.
function object(o) {
    function F() {
    }
    F.prototype = o;
    return F;
}
Copier après la connexion

Let : Object.creat() standardise la fonction ci-dessus, c'est-à-dire que Object.creat(o) implémente également le code ci-dessus

Héritage parasite

Dans l'héritage prototypique Sur en plus de cela, l'objet a été renforcé et amélioré

Ajout de méthodes d'attribut à l'objet
function creatAnother(o) {
    var clone = Object.create(o);
    clone.name = "ctc";
    clone.sayname = function () {
        console.log(this.name);
    }
    return clone;
}
Copier après la connexion


Héritage combiné parasite

Le but est de résoudre le problème d'héritage combiné Le problème est que Super() est appelé au moins deux fois en héritage combiné, 1. Super.call(this,arguments) 2. Sub.prototype = new Super()

En fait, nous je veux juste le prototype de la sous-classe Hériter des méthodes de la classe parent (généralement sur le prototype de la classe parent, car chaque instance n'a pas son propre espace de méthodes)

Nous pouvons donc utiliser l'héritage prototypique pour hériter uniquement du prototype de la sous-classe de la classe parent Le prototype de

remplace le
function inherit(SubType,SuperType) {
    var prototype = Object.create(SuperType);
    prototype.constructor = SubType;
    SubType.prototype = prototype;
}
Copier après la connexion

hérité combiné par
Sub.prototype = new Super();
Copier après la connexion

Recommandations associées :
inherit(Sub,Super);
Copier après la connexion
.

en JS Explication détaillée d'exemples de méthodes d'héritage

Quelles sont les méthodes d'héritage en JS ?

Interprétation détaillée du mécanisme d'héritage en js

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!