Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/04/2011, 12:58
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: curiosidades de javascript

que tal cronos!

en la observacion que haces, sucede por dos factores: todos los tipos de datos de javascript tiene un wrapper, y debido a que devuelves el valor this en el prototipo en la consola observaras que obtienes un objeto. el primer factor consiste en que automaticamente javascript envuelve los tipos de datos con un objeto de acuerdo a su tipo. por esa razon es posible invocar metodos directamente desde el valor aunque no se haya realizado estrictamente una instancia desde el constructor. me refiero por ejemplo,
Código:
"string".toUpperCase();
(new String("string")).toUpperCase();

(127).toString(16);
(new Number(127)).toString(16);
sin embargo, es naturaleza de javascript que al momento de imprimir el valor primitivo automaticamente invoca el metodo valueOf de ese wrapper. de modo que en lugar de mostrar el string [object Object] se imprime el valor. prueba a invocar el metodo valueOf cuando el string es devuelto como [object Object] y veras que obtienes el string real. en el caso de String, debe ser porque estas devolviendo el objeto en si (this). de todos modos, no es algo que sucede en todos los constructores, considera por ejemplo Number.

Código:
Object.prototype.that = function(){
return this;
};

console.log("string".that());
console.log("string".that().valueOf());

console.log((10).that()); // no muestra [object Object] ;
console.log((10).that().valueOf());
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.