Se mantienen “puros” para el paradigma prototipo, que es fundamental para JavaScript. Introdujeron una sintaxis especial para las clases por varias razones y enumeraré algunas de ellas a continuación. Pero primero quiero enfatizar que la sintaxis de la clase no es más que azúcar sintáctica para la forma estándar de hacer clases en JavaScript. Aquí hay un ejemplo rápido de cómo hacer clases y herencia en JavaScript, a la antigua usanza:
Programador de funciones () { this.type = 'genérico'; } Programmer.prototype.write_code = function () { this.waits = 'mucho tiempo'; }; función JavaScriptProgrammer () { this.type = 'específico'; } JavaScriptProgrammer.prototype = new Programmer (); JavaScriptProgrammer.prototype.constructor = JavaScriptProgrammer; JavaScriptProgrammer.prototype.write_code = function () { this.waits = 'poco tiempo'; }; let p = new Programmer (), j = nuevo JavaScriptProgrammer (); p.write_code (); j.write_code (); console.log (`tipo p: $ {p.type}, p espera: $ {p.waits}`); console.log (`j tipo: $ {j.type}, j espera: $ {j.waits}`); // tipo p: genérico, p espera: mucho tiempo // tipo j: específico, j espera: poco tiempo
O algo por el estilo, no he hecho esto por un tiempo. Si bien esto es extremadamente poderoso, no es exactamente intuitivo, obvio o particularmente legible.
La nueva sintaxis de clase le permite hacer exactamente lo mismo, excepto que ahora es legible y clara:
- ¿Cómo funciona la personalización dinámica en tiempo real en las páginas web?
- Cómo hacer una copia de seguridad / restaurar Drupal
- ¿Cuál es la mejor forma de producir banners HTML5?
- Cómo conseguir trabajo en el campo .net
- ¿Por qué no usamos el servidor Django para alojar un sitio web de Django en producción?
Programador de clase { constructor() { this.type = 'genérico'; } write_code () { this.waits = 'mucho tiempo'; } } clase JavaScriptProgrammer extiende Programador { constructor() { súper(); this.type = 'específico'; } write_code () { this.waits = 'poco tiempo'; } }
Sin comparación. Y, sin embargo, puede usar ambos, y son casi idénticos detrás de escena.
typeof Programmer === 'function' // true
No “clase” como podría haber esperado.
Algunas de las razones por las que agregaron esto son buenas, legibilidad, como se muestra arriba. También es una sintaxis que es mucho más común y que los nuevos programadores o programadores de otros idiomas aprenden y entienden más fácilmente. La sintaxis también ilustra más claramente qué métodos pertenecen a una clase (o prototipo de función). Las funciones estáticas son más claras debido a la nueva palabra clave static
. Y muchas más razones.
El comité TC39, que es el grupo que controla JavaScript, está haciendo un buen trabajo agregando nuevas características que son sólidas y claras, y aún conserva el paradigma del lenguaje. Lo que no pueden hacer, y desearían poder hacerlo, es cambiar JavaScript. Solo pueden agregar, no cambiar. Si cambian algo, incluso una pequeña cosa, literalmente, de hecho, “romperán Internet”.
Entonces, la respuesta específica a su pregunta es: JavaScript se mantiene fiel al paradigma prototipo y agrega nueva sintaxis para las clases.
Puedes tener tu pastel y comértelo también.