variable tutorial inside info functions classes and javascript oop class

tutorial - javascript info class



¿JavaScript tiene clases? (9)

Un amigo y yo tuvimos una discusión la semana pasada. Él afirmó que no había cosas tales como clases en JavaScript.

Dije que había como puedes decir var object = new Object()

Él dice "como no se usa una class palabras. No es una clase".

¿Quién tiene la razón?

Como una nota; Para el futuro necesita un implemento Classy JS conciso:

https://github.com/tnhu/jsface

Edición: julio de 2017

Las clases de JavaScript introducidas en ECMAScript 2015 son principalmente azúcar sintáctica sobre la herencia existente basada en prototipos de JavaScript. La sintaxis de clase no introduce un nuevo modelo de herencia orientado a objetos a JavaScript. Las clases de JavaScript proporcionan una sintaxis mucho más simple y clara para crear objetos y gestionar la herencia.

- Clases de Mozilla ES6: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes


AFAIK Javascript usa el concepto de prototipo y no es OO. Eso significa que no puede usar los conceptos típicos de OOP como herencia o polimorfismo.


Aunque JavaScript no tenía clases antes de ES6, el comportamiento de clase podría implementarse en ES5 al sellar los objetos (lo que hace que los objetos no sean extensibles). En un objeto sellado, no se pueden agregar nuevas propiedades y métodos y las propiedades no son configurables. Los valores de las propiedades aún se pueden establecer y leer. Digo clase, porque hay una advertencia. Las definiciones de métodos de un objeto sellado aún se pueden modificar. Esto se debe a que aún se pueden establecer los valores de las propiedades, a menos que cambie todas las propiedades del método para que no sean grabables; en ese punto, ha reproducido el comportamiento de la clase muy de cerca usando ES5.


Cuando pienso en las clases, pienso en los tipos y en el hecho de que las clases me permiten definir nuevos tipos. En js no puedes crear nuevos tipos. Puedes hacer todo tipo de cosas fantásticas con prototipos, pero el hecho de que todo sigue siendo un objeto realmente impacta en la naturaleza sin clases de js. Creo que las personas que usan la terminología de "clase" cuando hablan de js confunden el js como un lenguaje prototipo contra js como un lenguaje clásico, incluso más que el nuevo operador feo. En resumen, solo porque js sea OO no implica que las clases necesiten existir.


En Javascript, prácticamente todo es un object (los objetos pueden heredar de otros objetos). No tiene classes en el sentido clásico.

Aunque puede reproducir la mayoría de la funcionalidad de la definición / instanciación de clase tradicional mediante el prototipado de funciones.


Escuche la plática de Douglas Crockford aquí:
http://developer.yahoo.com/yui/theater/video.php?v=crockonjs-2

Se dirige directamente a su pregunta en su presentación:

La característica más controvertida del lenguaje es la forma en que lo hace la herencia, que es radicalmente diferente de prácticamente todos los demás idiomas modernos. La mayoría de los idiomas usan clases, los llamo ''lenguajes clásicos'', JavaScript no. JavaScript es clase libre. Utiliza prototipos. Para las personas que están formadas clásicamente y que miran el idioma, dicen: bueno, esto es deficiente. No tienes clases, ¿cómo puedes hacer algo? ¿Cómo puede confiar en que la estructura de su programa va a funcionar? Y nunca pasan de eso. Pero resulta que ...


Javascript es un lenguaje de programación orientado a objetos, sin embargo, en 2015, con el script ECMA, se han introducido 6 clases y ahora es correcto usarlas como otros lenguajes basados ​​en clases como Java. Por supuesto, como señaló el usuario de codemagician en su comentario, existen algunas diferencias profundas entre cómo funcionan las clases en js y java u otros lenguajes de programación "basados ​​en clases".

Sin embargo ahora en la programación js es posible usar por ejemplo código como:

class Animal { constructor(name) { this.name = name; } class Dog extends Animal { speak() { console.log(this.name + '' barks.''); } }

Fuente: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

Eso tiene algo en común con los lenguajes clásicos basados ​​en clases. El problema sigue siendo el soporte de navegador de esta nueva tecnología que recién está comenzando en este momento. Por lo tanto, todavía no es bueno usarlo en productos de producción. Pero no tengo ninguna duda de que este problema se resolverá rápidamente.

De ahí que la pregunta permanezca si js se ha convertido en un lenguaje de programación basado en clases debido a la implementación de estas nuevas características o si sigue siendo un lenguaje de programación orientado a prototipos de objetos.


Para agregar con las otras respuestas, javascript no tiene clases, aunque estoy empezando a ver declaraciones en las que se describe como algo así como clases, pero creo que solo confunde el problema.

JavaScript tiene prototipos, no clases, pero logran lo mismo, los prototipos son objetos que definen objetos, de ahí la confusión.

Un prototipo es una representación del estado interno privado que una clase podría administrar en Java, por ejemplo. En lugar de poner ese estado interno en una clase y presentar una interfaz para manipular el comportamiento, como en java, JavaScript expone la estructura de datos para que los programas de JavaScript los manipulen directamente.

Esta es la mejor descripción que he encontrado sobre el tema, los prototipos no son clases .


Por "el lenguaje X tiene clases", las personas generalmente se refieren al soporte de la programación orientada a objetos.

Sí, Javascript es un lenguaje orientado a objetos.


Técnicamente, la afirmación "JavaScript no tiene clases" es correcta.

Aunque JavaScript es un lenguaje orientado a objetos, no es un lenguaje basado en clases , es un lenguaje basado en prototipos . Existen diferencias entre estos dos enfoques, pero dado que es posible usar JavaScript como un lenguaje basado en clases, muchas personas (incluyéndome a mí) a menudo simplemente se refieren a las funciones de constructor como "clases".