informatica:programacion:cursos:programacion_avanzada_javascript:notacion_objetos
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| informatica:programacion:cursos:programacion_avanzada_javascript:notacion_objetos [2024/10/16 12:42] – [Propiedades con nombre dinámico] tempwin | informatica:programacion:cursos:programacion_avanzada_javascript:notacion_objetos [2024/10/30 13:01] (actual) – [Propiedades con nombre dinámico] tempwin | ||
|---|---|---|---|
| Línea 124: | Línea 124: | ||
| En el caso del uso de funciones constructoras, | En el caso del uso de funciones constructoras, | ||
| - | <WRAP center round todo 60%> | + | {{ : |
| - | Cambio de Foo.prototype | + | |
| - | </ | + | |
| En la imagen anterior el valor de '' | En la imagen anterior el valor de '' | ||
| Línea 285: | Línea 283: | ||
| Se puede ver que '' | Se puede ver que '' | ||
| - | <WRAP center round todo 60%> | + | {{ : |
| - | Usando __proto__ en notación de objeto. | + | |
| - | </ | + | |
| ===== Propiedades con nombre dinámico ===== | ===== Propiedades con nombre dinámico ===== | ||
| Línea 299: | Línea 295: | ||
| Una vez se ha creado esa propiedad podemos acceder a ella con la notación de punto o de array, siendo ambas equivalentes: | Una vez se ha creado esa propiedad podemos acceder a ella con la notación de punto o de array, siendo ambas equivalentes: | ||
| - | <WRAP center round todo 60%> | + | {{ : |
| - | Propiedades dinámicas | + | |
| - | </ | + | |
| Línea 334: | Línea 328: | ||
| ===== Métodos y propiedades simplificadas ===== | ===== Métodos y propiedades simplificadas ===== | ||
| + | Acostúmbrate a la " | ||
| + | |||
| + | Imagina un objeto '' | ||
| + | |||
| + | <code javascript> | ||
| + | var hello = { | ||
| + | greetings: function(name) { | ||
| + | return "hello " + name; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Pues bien, ahora tenemos disponible una **sintaxis simplificada** para métodos, que te permite declarar exactamente este mismo objeto sin necesidad de la palabra clave '' | ||
| + | |||
| + | <code javascript> | ||
| + | var hello = { | ||
| + | greetings(name) { | ||
| + | return "hello " + name; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Esa sintaxis simplificada puedes usarla también para //getters// y //setters// de propiedades: | ||
| + | |||
| + | <code javascript> | ||
| + | var hello = { | ||
| + | get salute() {return " | ||
| + | } | ||
| + | console.log(hello.salute); | ||
| + | </ | ||
| + | |||
| + | Un ejemplo un poco más completo, donde muestra un //getter// y un //setter// simulando una variable privada cuyo valor debe ser siempre positivo: | ||
| + | |||
| + | <code javascript> | ||
| + | var hello = (() => { | ||
| + | var _private = 42; | ||
| + | return { | ||
| + | get value() {return _private}, | ||
| + | set value(v) { | ||
| + | if (v > 0) { | ||
| + | _private = v; | ||
| + | } | ||
| + | return _private; | ||
| + | } | ||
| + | } | ||
| + | })(); | ||
| + | console.log(hello.value); | ||
| + | hello.value = -10; | ||
| + | console.log(hello.value); | ||
| + | hello.value = 20; | ||
| + | console.log(hello.value); | ||
| + | </ | ||
| ===== DEMO: Novedades en notación de objetos ===== | ===== DEMO: Novedades en notación de objetos ===== | ||
| + | |||
| + | Repaso de las 4 novedades importantes de **ECMAScript 6** en notación de objetos. | ||
| + | |||
| + | Posibilidad de **especificar el prototipo** del objeto en notación del objeto a la vez que declaramos el objeto: | ||
| + | |||
| + | <code javascript> | ||
| + | var a = {name: " | ||
| + | |||
| + | var b = { | ||
| + | __proto__: a, | ||
| + | cursos: [" | ||
| + | } | ||
| + | |||
| + | b.name; // -> ' | ||
| + | </ | ||
| + | |||
| + | Antes no se podía hacer, era necesario el uso de '' | ||
| + | |||
| + | Otra de las novedades son las **propiedades con nombre dinámico**: | ||
| + | |||
| + | <code javascript> | ||
| + | var b = { | ||
| + | __proto__: a, | ||
| + | cursos: [" | ||
| + | [" | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Lo ejecutamos: | ||
| + | |||
| + | <code javascript> | ||
| + | b; // -> Object { cursos: Array[1], i_0.123412341234: | ||
| + | </ | ||
| + | |||
| + | En ECMAScript 5 podíamos hacer: | ||
| + | |||
| + | <code javascript> | ||
| + | b[" | ||
| + | </ | ||
| + | |||
| + | Pero no podíamos hacerlo en la declaración de un objeto. | ||
| + | |||
| + | Otra novedad más es una **sintaxis simplificada para declarar funciones**. | ||
| + | |||
| + | <code javascript> | ||
| + | var b = { | ||
| + | __proto__: a, | ||
| + | cursos: [" | ||
| + | [" | ||
| + | foo(p) {return p + 1} // No es necesario usar ' | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Finalmente, otra característica nueva son los //shorthand properties names//: | ||
| + | |||
| + | <code javascript> | ||
| + | var url = " | ||
| + | |||
| + | var options = { | ||
| + | url, // en lugar de url: url | ||
| + | method: " | ||
| + | }); | ||
| + | </ | ||
informatica/programacion/cursos/programacion_avanzada_javascript/notacion_objetos.1729075332.txt.gz · Última modificación: por tempwin
