Tema: Dos puntos
Ver Mensaje Individual
  #20 (permalink)  
Antiguo 06/10/2008, 17:32
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Dos puntos

Creo que estáis mezclando diferentes cosas:

Cuando Edwards habla de herencia con su Base, a lo que se está refiriendo es a lo que también hacen otras librerías: construir un sistema de herencia sobre Javascript. Es decir, se trata de, sobre el sistema basado en prototipos que es lo que Javascript ofrece nativamente, construir un sistema basado en clases y herencia. Esto es algo perferctamente normal, pero va más allá de lo que JAvascript soporta nativamente y depende de cada implementación.

Por otro lado, a pesar del título, Resig, habla de "Class-style instantiation", y se centra precisamente en los problemas a resolver a la hora de realizar una implementación de un sistema de clases y herencia sobre Javascript.

En ambos casos lo que queda claro es que Javascript lo que soporta nativamente (por las características del propio lenguaje) es una sistema basado en prototipos. Lo que es también claro es que permite el desarrollo sobre él de otros tipos de sistemas.



Aclarado esto, queda el asunto de la nomenclatura.

Cuando digo que instancia va asociado a clase y que de lo que se habla en Javascript es de generadores y objetos, es porque esa es la nomenclatura. Cuando en tu ejemplo, buzu, llamas a la función empleado, ésta no es el constructor de una clase. El término correcto es generador. Y no produce una instancia, produce un objeto.

La nomenclatura de generador vs. constructor no me interesa discutirla. Es menos interesante. Aunque sí me parece necesario señalar que si se llama así es porque no se trata del constructor, un método de una clase, sino una función independiente que actúa como generador (y que potencialmente puede producir diferentes tipos de objetos).

La nomenclatura de instancia vs. objeto es más importante. En el caso de las instancias, estas están ligadas no sólo a la clase de la que son instancia, sino entre sí. Todas son iguales porque todas comparten esa clase. Si el sistema permite añadir nuevos miembros a una clase, eso afecta a todas las instancias de la clase.

En Javascript, podemos añadir miembros y métodos a un objeto generado a partir de una función generadora y que eso no afecte a ningún otro objeto generado con la misma función. Es la diferencia. Que si tras crear empleado1, le quiero añadir empleado1.saludar(), puedo hacerlo, y eso no afecta a otros objetos generados con empleado. empleado1 y empleado2 pueden ser muy distintos y estar generados ambos por la misma función generadora. Ambos tienen el mismo prototipo, pero son objetos independientes. De ahí que no se diga que son instancias de empleado.


Bueno, es tarde y creo sinceramente que la discusión se está perdiendo en demasiados temas tratados a la vez.