Techno-magis

Un semblant d'« override » en JavaScript

2014年9月22日(月曜日)

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

カテゴリ:
Zéflingによって、 2014/09/22 23:47:46
178回を読んだ。0件のコメントが投稿されています。

コメントなし

下のフォームにメッセージを書き込んで下さい。

コメントを書き込む