Résoudre l'erreur : is not a constructor
Bonjour tout le monde. Pour mon projet personnel du moment je dois convertir une couleur codée en HSL pour avoir son équivalent en RGB.
Pour cela j'ai créé 2 objets qui représente respectivement les 2 formats.
Puis pour ma conversion, je passe par le sous objet prototype pour étendre une fonction de conversion à mon objet HSL.
C'est là que le gros soucis apparait. Il semble impossible d'instancer un objet RGB à l'intérieur de cette fonction. Cependant en modifiant ma fonction, pour une raison que je ne comprend pas, j'arrive à retourner un objet RGB (voir second code plus bas).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
var RGB = function (red, green, blue){
this.red = red;
this.green = green;
this.blue = blue;
};
RGB.prototype.toString = function(){
return 'rgb('+ this.red +', '+ this.green +', '+ this.blue +')';
}
var HSL = function(hue, saturation, lightness){
this.hue = hue;
this.saturation = saturation;
this.lightness = lightness;
};
HSL.prototype.toString = function(){
return 'hsl('+ this.hue +', '+ this.saturation +'%, '+ this.lightness +'%)';
}
HSL.prototype.toRGB = function(){
var L = this.luminance / 100;
var S = this.saturation / 100;
var C = (1 - Math.abs(2 * L - 1)) * S;
var h_prime = this.teinte / 60;
var X = C * (1 - Math.abs(h_prime % 2 - 1));
var m = L - (C / 2);
if(h_prime <= 0 && h_prime < 1){
var RGB = new RGB(C, X, 0);
}
else if(h_prime <= 1 && h_prime < 2){
var RGB = new RGB(X, C, 0);
}
else if(h_prime <= 2 && h_prime < 3){
var RGB = new RGB(0, C, X);
}
else if(h_prime <= 3 && h_prime < 4){
var RGB = new RGB(0, X, C);
}
else if(h_prime <= 4 && h_prime < 5){
var RGB = new RGB(X, 0, C);
}
else if(h_prime <= 5 && h_prime < 6){
var RGB = new RGB(C, 0, x);
}
RGB.red = Math.round((RGB.red + m) * 255);
RGB.green = Math.round((RGB.green + m) * 255);
RGB.blue = Math.round((RGB.blue + m) * 255);
return RGB;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
HSL.prototype.toRGB = function(){
var L = this.lightness / 100;
var S = this.saturation / 100;
var C = (1 - Math.abs(2 * L - 1)) * S;
var h_prime = this.hue / 60;
var X = C * (1 - Math.abs(h_prime % 2 - 1));
var m = L - (C / 2);
var red = 0, green = 0, blue = 0;
if(h_prime <= 0 && h_prime < 1)
red = C; green = X;
else if(h_prime <= 1 && h_prime < 2)
red = X; green = C;
else if(h_prime <= 2 && h_prime < 3)
green = C; blue = X;
else if(h_prime <= 3 && h_prime < 4)
green = X; blue = C;
else if(h_prime <= 4 && h_prime < 5)
red = X; blue = C;
else if(h_prime <= 5 && h_prime < 6)
red = C; blue = X;
red += m;
green += m;
blue += m;
return new RGB(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255));
} |
Bref, comment faire pour me débarrasser de cette erreur ?