L'appel de la classe de base de la fonction de la classe de l'héritage en JavaScript
Veuillez consulter l'exemple suivant:
MyBaseClass = function(a) {
this.a = a;
};
$.extend(MyBaseClass.prototype, {
init: function() {
console.log('I am initializing the base class');
}
});
MyChildClass = $.extend(MyBaseClass, {
init: function() {
MyBaseClass.prototype.init();
console.log('I am initializing the child class');
}
});
var = new MyChildClass();
var.init();
Ce devrait sortir à la fois de "je suis l'initialisation de la classe de base" et " je suis de l'initialisation de l'enfant de la classe.
J'ai besoin d'être en mesure d'hériter de la classe MyBaseClass, mais encore être en mesure d'appeler sa méthode init() au début de la nouvelle méthode init ().
Comment dois-je faire?
$.extend
ne fait pas ce que vous en pensez.sorte de manifeste problème avec ce code est l'utilisation de
var
en basQu'est-ce que
$.extend
de toute façon?celle-ci est définie par jQuery. Je suis en supposant que celui-ci.
Je suis sûr que Felix savait, mais il était soulignant que l'opération devrait avoir ajouté pertinentes de la balise.
OriginalL'auteur barakuda28 | 2013-04-08
Vous devez vous connecter pour publier un commentaire.
jQuery étendre de ne pas construire héritage, mais "Fusionner le contenu de deux objets ou plus ensemble dans le premier objet".
Utilisation prototype à base d'héritage à la réalisation de votre héritage et appeler explicitement le "super" méthode :
Sortie :
Object.create
être utilisé ici?Que l'OP parle de "classes" et de la succession, personnellement, je pense que le prototype est plus adapté.
Peut-être que Jan censé utiliser
MyChildClass.prototype = Object.create(MyBaseClass.prototype);
. Que ce serait une meilleure approche de l'héritage à mon humble avis. L'instanciation d'une nouvelle instance de la mère ont des inconvénients.Après réflexion, je pense que vous avez raison. J'ai modifier.
OriginalL'auteur Denys Séguret
jsFiddle Démo
Couple de choses.
extend
vraiment juste ajoute sur propriétés, il ne fait pas beaucoup. Donc, vous devez disposer d'une fonction de votre classe de prêt, héritent de la classe de base, et ensuite utiliser étendre sur les classes de prototype.Ici est une autre approche que j'aime utiliser pour héritage, lorsque la spécificité des méthodes va être un problème qui est de stocker de la classe de base dans ses propres biens
OriginalL'auteur Travis J
Un autre prototype de modèle pour atteindre cet objectif:
De sortie:
Ici
this.super
stocke la référence à la classe de base.J'ai effectivement vu que dans le jquery, le code source. Je pense que c'est parce que parfois, le constructeur points à la mauvaise fonction à la fois (ne me souviens pas le scénario exact de l'obtenir pour le faire à l'instant).
Pour être en mesure d'utiliser
instanceof
.a instanceof MyChildClass
Il y a un problème avec votre modèle : vous perdez le contexte en utilisant
this.super.init()
outhis.super.anyfunc()
. Cettesuper
ressemble à une mauvaise idée.Vous avez raison, je vous remercie. Eh bien, c'est juste un autre modèle, pourquoi pas, certaines personnes l'utilisent.
OriginalL'auteur dfsq