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:

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
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
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
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 ?

Merci d'avance