class RGB { #r = 0 #g = 0 #b = 0 constructor(){ console.log(this.#r, this.#g, this.#b) } checkRange(value){ return value >= 0 && value <= 255 } get r(){ return this.#r } set r(newR){ this.#r = this.checkRange(newR) ? newR : this.#r } get g(){ return this.#g } set g(newG){ this.#g = this.checkRange(newG) ? newG : this.#g } get b(){ return this.#b } set b(newB){ this.#b = this.checkRange(newB) ? newB : this.#b } get hex(){ const t = a => (a < 16 ? '0' : '') + a.toString(16).toUpperCase() return `#${t(this.#r)}${t(this.#g)}${t(this.#b)}` } set hex(newHex){ const hexRegexp = /^#([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/ let parsed; if (parsed = newHex.match(hexRegexp)){ //console.log(parsed) const [,r,g,b] = parsed this.r = parseInt(r, 16) this.g = parseInt(g, 16) this.b = parseInt(b, 16) } else { throw SyntaxError('wrong hex color') } } get rgb(){ const {r,g,b} = this return `rgb(${r},${g},${b})` } set rgb(newRGB) { const rgbRegexp = /^\s*rgb\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)\s*$/ let parsed; if (parsed = newRGB.match(rgbRegexp)){ const [,r,g,b] = parsed this.#r = +r; this.#g = +g; this.#b = +b; } else { throw SyntaxError('wrong rgb color') } } } class RGBA extends RGB { #a = 0; constructor() { super(); console.log(this.r, this.g, this.b, this.#a) } checkAlphaRange(value){ return value >= 0 && value <= 1 } get a(){ return this.#a } set a(newA){ this.#a = this.checkAlphaRange(newA) ? newA : this.#a } get rgba(){ const {r,g,b,a} = this return `rgba(${r},${g},${b},${a})` } set rgba(newRGBA) { const rgbRegexp = /^\s*rgba\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*((0\.\d+)|1|0)\s*\)\s*$/ let parsed; if (parsed = newRGBA.match(rgbRegexp)){ const [,r,g,b,a] = parsed this.r = +r this.g = +g this.b = +b this.a = +a } else { throw SyntaxError('wrong rgba color') } } set color(color) { if(color.includes('#')) { this.hex = color; } else if(color.includes('rgba')) { this.rgba = color; } else if(color.includes('rgb')) { this.rgb = color; } } } let rgb = new RGB; let rgb2 = new RGB; let rgba = new RGBA; let rgba2 = new RGBA; let rgba3 = new RGBA; let rgba4 = new RGBA; rgb.hex = '#eeccee'; console.log('rgb', rgb); rgb2.rgb = 'rgb(238, 204, 238)'; console.log('rgb2', rgb2); console.log('get rgba', rgba.rgba) rgba2.color = 'rgb(200, 45, 255)'; rgba3.color = '#eeeccc'; rgba4.color = 'rgba(102, 45, 255, 0.7)'; console.log(rgba2) console.log(rgba3) console.log(rgba4)