Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/04/2011, 12:03
Avatar de _cronos2
_cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: curiosidades de javascript

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 original
  1. String.extender({
  2.  'HexaRGB' : function(){
  3.   if(this.match(/\d{1,3}/g).length == 3){ return this }
  4.   var str = this;
  5.   str = str.replace('#', '');
  6.   if(str.length < 6){
  7.    var array = str.split('');
  8.    str = array[0] + array[0] + array[1] + array[1] + array[2] + array[2];
  9.   }
  10.   var colores = str.match(/\w{2}/g);
  11.   var rojo = parseInt(colores[0], 16), verde = parseInt(colores[1], 16), azul = parseInt(colores[2], 16);
  12.   return 'rgb(' + rojo + ', ' + verde + ', ' + azul + ')';
  13.  },
  14.  'RGBaHex' : function(){
  15.   if(/^#/.test(this)){ return this }
  16.   var str = this.match(/\d{1,3}/g);
  17.   return '#' + str[0].convertirRGB() + str[1].convertirRGB() + str[2].convertirRGB();
  18.  },
  19.  'convertirRGB' : function(){
  20.   var txt = "0123456789ABCDEF";
  21.   return txt.charAt((this - this % 16) / 16) + txt.charAt(this % 16);
  22.  }
  23. });
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 original
  1. var string = '#F00'.HexaRGB(); // rgb(255, 0, 0)
  2. var texto = '0, 255, 0'.RGBaHex(); // #00FF00
Todo funciona bien. El problema llega aquí:
Código Javascript:
Ver original
  1. var string = '#F00'.RGBaHex(); // #F00
  2. 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 original
  1. JSPlus.escribir = function(obj){
  2.  switch(obj.constructor){
  3.   case String:
  4.    console.log(obj);
  5.   break;
  6.   case Object:
  7.    var str = '';
  8.    for(i in obj){
  9.     str += i + ' : ' + obj[i] + '\n';
  10.    }
  11.    console.log(str.replace(/\n$/, ''));
  12.   break;
  13.   case Array:
  14.    console.log(obj.split('\n'));
  15.   break;
  16.  }
  17.  return true;
  18. };
  19. 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
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red