Hello,
A mon tour de poser une question pour changer. Je souhaiterai une écrire une factory (fonction constructeur de fonctions) et respecter la chaîne prototypale, c'est-à-dire new Factory() instanceof FactoryAvec les constructeurs classiques retournant un objet, c'est le comportement par défaut. Mais quand il s'agit de retourner une fonction, c'est beaucoup plus délicat.
Exemple:
La seule option que j'ai trouvé est de modifier dynamiquement le prototype via Object.setPrototypeOf:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 function MultiplierFactory(n1){ return function(n2){ return n1*n2; }; } var multiplyBy3 = new MultiplierFactory(3); multiplyBy3(7) > 21 multiplyBy3 instanceof MultiplierFactory > false
Ce qui fonctionne sur tous les navigateurs supportant Object.setPrototypeOf. Mais que faire dans le cas d'IE9 et inférieur ? Existe-t-il une solution en EcmaScript 5 pour parvenir à ce résultat ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function MultiplierFactory(n1){ var f = function(n2){ return n1*n2; }; Object.setPrototypeOf(f, MultiplierFactory.prototype); return f; } var multiplyBy3 = new MultiplierFactory(3); multiplyBy3(7) > 21 multiplyBy3 instanceof MultiplierFactory > true
Merci d'avance
Partager