La programmation JavaScript permet de faire certaines choses, vu que les objets en tant que tels (comme en Java par exemple) n'existent pas vraiment (du moins, pas pour l'instant), mais il est toujours possible d’étendre un objet sans toucher à celui d'origine. Un peu comme un « extends + override », mais sur l'objet en mémoire. C'est très utile quand on utilise un framework, mais qu'on ne veut pas toucher au cœur de celui-ci (pour faire des mises à jour plus facilement).
/** Objet qui servira d'exemple */
var myObject = {
myFunction : function(arg1, arg2) {
return arg1+arg2;
}
};
Le plus simple reste souvent de remplacer la méthode d'origine :
/** j'écrase ma fonction par une autre */
myObject.myFunction = function newFunction (arg1, arg2) {
return '[' + arg1 + arg2 + ']';
};
Si le code est simple, ça peut être une solution.
Si c'est plus complexe et que l'on veut juste surcharger le résultat d'origine. On peut faire mieux que cela, comme ceci :
/** sauvegarde de myFunction pour extension */
myObject.oldFunction = myObject.myFunction;
/** ajout de ce que l'on veut faire en plus de la fonction d'origine */
myObject.myFunction = function extendedFunction (arg1, arg2) {
var result = this.oldFunction.apply(this, [arg1, arg2]); // appel de la fonction avec le contexte
return '[' + result + ']';
};
En savoir plus sur apply (la doc MDN est bien foutue).