Techno-magis

Un semblant d'« override » en JavaScript

Monday 22th September 2014

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

CODE:

/** 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 :

CODE:

/** 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 :

CODE:

 
/** 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).

Categories:
By Zéfling, the 22/09/2014 at 23:47:46
The ticket was read 276 times, with 0 comment posted.
👍 0 👎 0

No comment

Write your below.

Write a commentary