No sé si a alguien le va a interesar pero yo lo pongo igual
Resulta que ayer mientras desarrollaba un método para strings me topé con algo raro. Aaquí está el código:
Código Javascript
:
Ver originalString.extender({
'HexaRGB' : function(){
if(this.match(/\d{1,3}/g).length == 3){ return this }
var str = this;
str = str.replace('#', '');
if(str.length < 6){
var array = str.split('');
str = array[0] + array[0] + array[1] + array[1] + array[2] + array[2];
}
var colores = str.match(/\w{2}/g);
var rojo = parseInt(colores[0], 16), verde = parseInt(colores[1], 16), azul = parseInt(colores[2], 16);
return 'rgb(' + rojo + ', ' + verde + ', ' + azul + ')';
},
'RGBaHex' : function(){
if(/^#/.test(this)){ return this }
var str = this.match(/\d{1,3}/g);
return '#' + str[0].convertirRGB() + str[1].convertirRGB() + str[2].convertirRGB();
},
'convertirRGB' : function(){
var txt = "0123456789ABCDEF";
return txt.charAt((this - this % 16) / 16) + txt.charAt(this % 16);
}
});
extender es un función que añade propiedades/métodos al prototipo. Total, que para hacer las pruebas a ver si funcionaba bien usé la consola de errores, y resulta que si tengo esto:
Código Javascript
:
Ver originalvar string = '#F00'.HexaRGB(); // rgb(255, 0, 0)
var texto = '0, 255, 0'.RGBaHex(); // #00FF00
Todo funciona bien. El problema llega aquí:
Código Javascript
:
Ver originalvar string = '#F00'.RGBaHex(); // #F00
var texto = '0, 255, 0'.HexaRGB(); // 0, 255, 0
Esto funciona si lo pongo dentro de la página, pero en la consola me devuelve [object Object]
En Firebug e IE sí me decía por qué estaba compuesto el objeto pero como las pruebas las estaba haciendo con Chrome me di cuenta después XD así que hice esto:
Código Javascript
:
Ver originalJSPlus.escribir = function(obj){
switch(obj.constructor){
case String:
console.log(obj);
break;
case Object:
var str = '';
for(i in obj){
str += i + ' : ' + obj[i] + '\n';
}
console.log(str.replace(/\n$/, ''));
break;
case Array:
console.log(obj.split('\n'));
break;
}
return true;
};
JSPlus.ecribir('#F00'.RGBaHex());
Y resulta que me devuelve el objeto String que se crea para manipular el propio string. Devuelve algo como esto:
Cita: 0 : #
1 : F
2 : 0
3 : 0
HexaRGB : function()
RGBaHex : function()
convertirRGB : function()
__proto__ : Object
Así que la pregunta es, ¿por qué en la consola de errores devuelve el objeto String, mientras que en la página devuelve el string?
Saludos (:
PD: Mola la firma