Wrapper Objects
Los objetos en JavaScript, tienen valores compuestos: son una colección de propiedades, o nombres de valores. Nos referimos al valor de una propiedad, usando la notación ".". Cuando el valor de una propiedad es una función, lo llamamos método. Para invocar el método m del objeto o, escribimos o.m()
Sabemos que los strings también tienen propiedades y métodos:
var s = "Hola mundo"; // Un string var word = s.substring(s.indexOf(" ")+1, s.length); // Uso de las propiedades (métodos) del objeto String.
Los strings, en Javascript son valores primitivos, al igual que los números y booleanos, y por tanto, no son objetos. ¿Por qué entonces tienen propiedades, como los objetos? Cada vez que intentamos referirnos a una propiedad del string s, JavaScript convierte el valor real de dicho string en un objeto, como si lo hubiésemos declarado con el constructuor new String(s). Dicho objeto, hereda métodos, y es usado para resolver las referencias a sus propiedades (métodos). Una vez que el valor de la propiedad (método) ha sido resuelto, el nuevo objeto es declarado.
Los números y booleanos, tienen métodos por la misma razón que las cadenas: un objeto temporal se crea cuando los declaras, usando los constructores Number() o Boolean(), y el método que invoquemos, es resuelto usando dicho objeto temporal. A estos objetos temporales que envuelven a los valores primitivos, son llamados Wrapper Objects. No hay wrapper objects para null ni undefined: cada vez que intentemos acceder a una propiedad o método de éstos, nos devolverá un TypeError.
Para esclarecer un poco lo dicho anteriormente, supongamos el siguiente código, y piensa qué sucederá cuando sea ejecutado:
var s = "test"; s.len = 4; var t = s.len;
Nada más ejecutar el código, el valor de t es undefined. En la segunda línea de código, se crea un objeto String, de modo temporal: un wrapper object, a partir de s, y le añadimos la propiedad len, con valor 4, y después, eliminamos dicho objeto temporal. En la tercera línea volvemos a crear un nuevo objeto temporal, a partir del original s (no modificado), e intentamos leer la propiedad len. Pero no existe, porque es un objeto temporal recién creado, y por tanto, la expresión se resuelve como undefined. Por tanto, el valor de t al final de la ejecución, será undefined. Este código demuestra que los valores primitivos (strings, números y cadenas), se comportan como objetos cuando intentas acceder a sus propiedades o métodos, pero si intentas especificar el valor de una de sus propiedades, dicho intento es ignorado, ya que el cambio es realizado sobre un objeto temporal, o wrapper object. Es decir, sus propiedades son de sólo lectura: inmutables.
No hay comentarios :
Publicar un comentario