根据StackOverflow主题之一,我尝试创建自己的RGB到HEX颜色转换器。
我不知道为什么,而是转换为双RGB数字。
因此,当输入为rgb(0, 128, 192)
时,它会调出#00128192
。
我的代码是:
fromRGB: {
toHEX: {
supportFunc: function(number) {
var hex = number.toString(16);
return hex.length == 1 ? '0' + hex : hex;
},
convert: function(r, g, b) {
var lol = '#' + this.supportFunc(r) + this.supportFunc(g) + this.supportFunc(b);
console.log(lol);
}
},
prepareAndExecute: function(color_field) {
// preparing
var numbers = color_field.match(/\d+/g);
if(numbers.length == 3) {
this.toHEX.convert(numbers[0], numbers[1], numbers[2]);
} else {
alert('wrong RGB number format');
}
//this.toHSL(preparedValue);
}
}
我执行prepare函数,lol
变量是应该包含HEX格式转换颜色的变量。
我的代码有什么问题,为什么它不起作用?
答案 0 :(得分:1)
<强>解释强>
这是因为您将字符串传递给supportFunc
而不是数字。
match
中prepareAndExecute
的结果是一个字符串数组,因此当您在toString
中调用supportFunc
时,您正在调用String.prototype.toString
(而不是{ {1}})按原样返回字符串。
<强>解决方案:强>
在Number.prototype.toString
中,在使用supportFunc
之前将number
转换为数字:
toString
或在将它们传递给var hex = Number(number).toString(16); // using Number to convert a string to a number (you can use parseInt or unary + if you like)
之前转换它们:
convert