128 votes

L’appel de méthode de base à l’aide de JavaScript prototype

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 ?

200voto

Christoph Points 64389

Je ne comprenais pas ce qu’exactement que vous essayez de le faire, mais normalement mise en œuvre de comportements spécifiques à l’objet se fait dans ce sens :

24voto

Ramuns Usovs Points 1152

Eh bien une façon de le faire serait sauver la méthode de base et appeler ensuite la méthode surchargée, de comme suit

16voto

Magnar Points 15142

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.

10voto

pholly Points 93

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 :

2voto

xtofl Points 22333

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X