Je suis nouveau dans les cours ES6 et essayez de comprendre comment l'héritage fonctionne. J'ai créé une classe parent p> modal code> et une classe enfant
Childmodal code> comme ceci:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<title>Class test</title>
<h1 id="mainTitle">
Main title
</h1>
<h2 id="childTitle">
Child title
</head>
<body>
<script src="Modal.js"></script>
</body>
</html>
3 Réponses :
Vous devez définir vous rejoignez actuellement une chaîne Puisque vous créez deux instances, ils ne se rapportent pas les uns aux autres, donc Donc, vous avez non seulement besoin de définir le titre dans P> _title code> dans votre constructeur:
code> avec
non défini Code> qui donne dans
non défini code>. p>
enfant.title code> isn ' T la même chose que
modal.title code>, ainsi concaténant que les deux résultent de deux chaînes différentes. p>
modal.title = 'Normes JavaScript' Code>, mais vous devez également définir la même chose sur
ENFANT.TITLE = 'NORMES JavaScript' CODE>. P>
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<title>Class test</title>
<h1 id="mainTitle">
Main title
</h1>
<h2 id="childTitle">
Child title
</head>
<body>
<script src="Modal.js"></script>
</body>
</html>
Vous devez définir le titre sur le variateur enfant.title code> car les instances de deux classes ne sont pas liées depuis que vous avez utilisé
nouveau code> sur chacun.
Cela signifie-t-il que je n'ai pas à définir _title code> dans le constructeur?
J'ai mis à jour le constructeur pour ressembler à ceci: this.title = '' code>, vous devez l'avoir dans le constructeur, en quelque sorte, car avoir une valeur par défaut de
non défini code> n'est probablement pas La meilleure idée ici puisque vous savez que la valeur sera toujours une chaîne.
Les champs de classe tels que le titre, le sélecteur et le document ne sont pas partagés entre les instances. Ainsi, lorsque vous attribuez un titre à votre variable code> modal code>, il n'influence aucune autre voie ni classes. P>
Lorsque les appels d'enfants Lorsque vous exécutez ensuite super (sélecteur, titre) code>, il passe son argument de titre à l'initialisateur de
modal code>. Dans la classe code> modal code>, il est ensuite stocké dans le champ code> code>. P>
this.title = titre + ceci.title; code> Le champ de titre n'a aucune valeur. C'est
non défini code>. Par conséquent, le titre finit par être
"wow" + indéfini code>, ce qui donne "WOW non défini". P>
Grande explication, j'ai dû lire l'autre réponse pour comprendre cependant. Merci!
Sous la capuche, les classes ES5 utilisent toujours Prototype .
Donc, une autre solution pourrait être modifiée p> modal.title = "standards"; code> à
modal.pototype.title = "normes"; p> P> P> P> P> P> > De cette façon, vous ne changerez pas la propriété dans l'instance, mais vous modifierez la valeur dans le prototype (alias la définition de la classe): p>
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<title>Class test</title>
<h1 id="mainTitle">
Main title
</h1>
<h2 id="childTitle">
Child title
</head>
<body>
<script src="Modal.js"></script>
</body>
</html>
L'enfant hérite de la classe i>, pas l'instance modale que vous avez faite. Pensez au fait que vous pourriez faire 20 instances modales différentes; Lequel conduirait l'héritage?
Que se passe-t-il si, au lieu de
modal.title = "standards"; code> vous essayez
modal.pototype.title = "normes"; code>?
Dans votre constructeur
ChildModal CODE>, il reçoit 2 paramètres, n'est-ce que vous venez de passer
#chidtitle code> comme premier para, où est le 2ème?