Techno-magis

Un semblant d'« override » en JavaScript

Lundi 22 Septembre 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).

Catégories :
Par Zéfling, le 22/09/2014 à 23:47:46
Le billet a été lue 202 fois, avec 0 commentaire publié.

Aucun commentaire

Écrivez le votre ci-dessous.

Écrire un commentaire