Est-il possible d’appeler la méthode de base d’une méthode de prototype en JavaScript, si elle n’est été substituée ?
Réponses
Trop de publicités?Je crains que votre exemple ne fonctionne pas de la façon dont vous pensez. La présente partie:
this.do = function(){ /*do something*/ };
remplace la définition de
MyClass.prototype.do = function(){ /*do something else*/ };
Depuis l'objet nouvellement créé a déjà un "faire" de la propriété, il ne recherche pas les prototypes de la chaîne.
La forme classique de l'héritage en Javascript est awkard, et difficile à saisir. Je voudrais suggérer à l'aide de Douglas Crockfords simple motif d'héritage à la place. Comme ceci:
function my_class(name) {
return {
name: name,
do: function () { /* do something */ }
};
}
function my_child(name) {
var me = my_class(name);
base_do = me.do;
me.do = function () {
if (this.name === 'something'){
//do something new
} else {
base_do();
}
}
return me;
}
var o = my_child("something");
o.do(); // does something new
var u = my_child("something else");
u.do(); // uses base function
À mon avis une bien meilleure façon de manipuler les objets, les constructeurs et héritage en javascript. Vous pouvez en lire plus dans le Crockfords Javascript: Les bonnes parties.
Je sais que ce post est de 4 ans, mais à cause de mes antécédents c# que je cherchais une manière d’appeler la classe de base sans avoir à spécifier le nom de la classe, mais plutôt l’obtenir par une propriété sur la sous-classe. Donc mon seul changement à la réponse de Christoph
De ceci :
Pour cela :
Si je comprends bien, vous voulez des fonctionnalités de Base à toujours exécuter, alors qu’un morceau de celui-ci devrait être laissé aux implémentations.
Vous pourriez obtenir aidé par le modèle de conception de «méthode de modèle».