2010-09-13 13 views
8

Desde mi experiancia, JavaScript hace esto:Uso de patrones de herencia en JavaScript

  • manipular el DOM u otro huésped objetos
  • adición de controladores de eventos
  • haciendo Ajax

Desde que empecé a cavar en la herencia prototípica, me gustaría saber cómo se usa realmente en la práctica. ¿Cuáles son los casos de uso?

¿Alguien está aquí activamente utilizando patrones de herencia? ¿Para qué?

(entiendo que hay un montón de respuestas a mi pregunta - me gustaría escuchar algunos de ellos para conseguir la sensación de utilizar la herencia en JavaScript)

+0

¿Debería ser esto cw? – jrharshath

+0

¿Qué significa cw? –

+0

Wiki de la comunidad. –

Respuesta

2

Mi experiencia trabajando con jQuery (y JavaScript antes) es que la herencia prototípica no es tan útil como esperaba. Tiene usos, pero no es fundamentalmente importante para el lenguaje.

En JavaScript si desea devolver un objeto con un método foo:

return { 
    foo: function() { 
    alert('You called foo!'); 
    } 
}; 

Y las personas que llaman pueden tratar los objetos tales como polimórficos - es decir, que puedan llamar foo sin preocuparse de qué "tipo" de objeto es. No hay necesidad de herencia.

En este contexto, los prototipos son simplemente una optimización. Permiten crear una gran cantidad de objetos sin tener que replicar un gran conjunto de propiedades de función en cada instancia. Es por eso que jQuery lo usa internamente.Un objeto jQuery tiene docenas de funciones, y podría ser una sobrecarga importante copiarlas en cada instancia.

Pero desde la perspectiva de un usuario de jQuery, los prototipos no son particularmente importantes. Se podría reescribir para no usarlos y aún así funcionaría (pero podría usar mucha más memoria).

0

Usted debe tener un vistazo al código para cualquier de las grandes bibliotecas, como jQuery, se usa bastante extensamente dentro de estas.

+1

Necesita más jQuery. – ChaosPandion

+0

OK, por lo que entiendo, jQuery define un objeto enorme que contiene muchos métodos, y luego este objeto se utiliza como el prototipo del constructor de jQuery, y luego creamos dinámicamente objetos usando ese constructor y todos esos objetos pueden usar los métodos. de ese otro objeto, ya que heredan de él. ¿Derecha? –

1

A medida que se escribe cada vez más código específicamente para dispositivos móviles con iOS, Android, et.al, y mientras el paradigma de la aplicación madura, hay un cambio hacia poner cada vez más complejidad y lógica en las bibliotecas javascript que se ejecutan en el dispositivos.

El modelo Object/inheritance de javascript proporciona al desarrollador un conjunto de herramientas muy flexible para desarrollar aplicaciones dinámicas y complejas.

El modelo de herencia JavaScript le permite:

  • extienden un prototipo (definición de objeto) en cualquier lugar en el código, incluso después de los casos de el objeto ha sido creado.
  • Extienda una instancia de un prototipo separado de otras instancias.
  • Extienda todos los objetos incorporados con nuevas funcionalidades.

Esto es similar a las características de clase y mixin de ruby, y abre un montón de nuevos patrones de diseño y herencia, de solo unos pocos han sido inventados o documentados.

jquery es el mejor ejemplo de una biblioteca javascript madura. link text prototipo y scriptaculus son otros.

1

Douglas Crockford tiene algunos artículos interesantes respecto a las varias herencia:

http://javascript.crockford.com/inheritance.html

http://javascript.crockford.com/prototypal.html

http://javascript.crockford.com/private.html

El primero de ellos es viejo, y es posible que no quiere hacer nada de esa manera, pero muestra cuán flexible puede ser JavaScript. El segundo es solo cómo usa prototipos. El último es interesante si vas a usar objetos mucho en JavaScript, y tiene un poco de herencia.

Leerlos (son cortos) puede que no te den todas las respuestas que deseas, pero sospecho que te hará pensar y ver JavaScript de una manera ligeramente diferente. Dicho esto, Crockford siempre tiene mucha confianza en sus escritos, pero no creo que deba tomar su palabra como ley.

0

Probablemente el mejor ejemplo de herencia utilizado en JavaScript que conozco es la biblioteca Ext. En lugar de jQuery, que es principalmente un gran objeto que se extiende por sí mismo, Ext muestra un enfoque más típico de la herencia que se encuentra en los programas que aplican paradigmas orientados a objetos.

Ext es una biblioteca que se compone de muchos objetos configurables que se pueden usar de varias maneras. La mayoría de los objetos se generalizan en clases abstractas. Dale una mirada.

La instalación ha estado allí durante mucho tiempo, pero las tendencias hacia ajax y aplicaciones web de cliente más gruesas significa que es cada vez más común, aunque normalmente se empaqueta dentro de las bibliotecas que está utilizando.

He jugado con la herencia prototípica antes y la he usado con moderación en algún trabajo durante mi trabajo de tiempo completo. Es útil saberlo y ser bueno para entenderlo, pero en realidad no hay tantos casos de uso que haya tenido para él día a día.