2010-08-08 8 views
13

He leído sobre el impulso de Crockford para using JavaScript in a more obviously prototypal manner (clonar objetos para crear nuevos, nunca usando la palabra clave "nueva"). Pero en la naturaleza, nunca he visto a nadie usar este estilo para proyectos más grandes.¿Dónde puedo encontrar un ejemplo de un gran proyecto de JavaScript usando el método de Crockford para la herencia prototípica?

¿Dónde puedo encontrar ejemplos de un proyecto grande que utiliza este estilo?

+0

Boris, he editado su pregunta un poco ...Pedir un ejemplo está bien, pero las discusiones sobre prototipal frente a prototípico versus clásico de Crockford se han hecho antes. [Por ejemplo] (http://stackoverflow.com/questions/1809914/oo-javascript-constructor-pattern-neo-classical-vs-prototypal) (... [y muchos más] (http://stackoverflow.com)/search? q = javascript + classical + prototypal) ...) Puede que te guste especialmente: [¿Cuáles son los beneficios de la herencia de prototipos sobre los clásicos?] (http://stackoverflow.com/questions/2800964/what-are- the-benefits-of-prototypal-inheritance-over-classical) – Shog9

Respuesta

5

tienen que ofrecer un anti-awnser;) aunque gustaría ver grandes proyectos de usarlo también (si las hay). Me encanta Object.create y lo prefiero, aunque nunca he podido utilizarlo ampliamente en un gran proyecto ni creo que debería serlo.

  1. OO Los desarrolladores son adictos a la 'nueva' del operador, es un habito difícil deshacerse fuera y fácil de entender de un vistazo. El código escrito de forma clásica ahora es más fácil de entregar al siguiente desarrollador, que ya es un fuerte argumento contra Object.create.

  2. Object.create en ES5 (la siguiente versión de JS) es mucho más potente y drásticamente diferente de Object.create como un shim en ES3 (versión actual de JS). Por esta razón, es mejor evitar Object.create (como está disponible ahora) como una estrategia ampliamente utilizada en proyectos grandes, ya que funcionará de manera diferente cuando ES5 se convierta en la corriente principal de lo que se puede implementar en este momento.

  3. Los grandes proyectos hacen uso de frameworks (cuando no tienes 'ninjas' JS deshonestos que insisten en escribir todo desde cero reinventando la rueda una y otra vez) y todos los frameworks populares promueven la herencia prototípica de la manera clásica. Podrían tener un método Object.create algo en forma de .clone() o algo así, pero está oscurecido por los tutoriales y la documentación con respecto a la herencia de objetos y la creación de subclases.

  4. Las propiedades privadas son imposibles con Object.create en ES3. Me encontré con más problemas más Jugueteé alrededor con Object.create y chico he jugueteó un rato con él ...

He jugado un poco mucho con Object.create e incluso escrito un marco pequeño alrededor llamó 'Objeción' (si lo interpusieron, lo encontrará;) aunque se abstuvo de vincular a github) y 'JSoo' (descontinuado). Es demasiado estrafalario, inacabado y progresivo para convertirse en mainstream y mantenible en términos de recursos humanos para grandes proyectos. Recomiendo en contra de eso mientras soy partidario.

+0

De hecho, cada vez que uso personalmente el Object.create shim, solo lo uso en patrones de fábrica e internamente para frameworks que escribo como hobby. Por lo tanto, los únicos objetos que creo al vincular API son literales de objetos que contienen datos intrínsecos, que nunca necesitan subclases. Como la Banda de los cuatro consejos, usa la composición sobre la herencia. – BGerrissen

-1

intento: http://showroom.auction123.com/auction123/index.html

No utilizamos nueva en absoluto ... Simplemente establecemos el resultado de una función y usar eso como una clase.

Por ejemplo:

// CLASS DECLARATION 
var ClassName = function() { 

    var public; 
    var private; 

    var publicFunction = function() { 
    // DO STUFF 
    }; 

    // RETURN OBJECT 
    return { 
    public: public, 
    publicFunction: publicFunction 
    }; 

}; 

El retorno final sólo le dice lo que va a ser pública.

instanciarlo haciendo:

var object = ClassName(); 
+0

Bueno, eso está bien para lo que hace, pero no hay herencia allí, prototipo o de lo contrario ... Si tiene que crear cada objeto desde cero cada vez, ¡Supongo que no creas tantos objetos! – Shog9

+0

Este es el patrón del módulo, que está destinado a singletons. Usarlo para la creación de instancias de objetos múltiples como una estrategia de servir a todos desperdiciará la memoria como todos los métodos, las propiedades del objeto creado también serán un objeto nuevo. No hay herencia, el operador instanceof siempre devolverá false, el método isPrototypeOf será inútil y cualquier intento de subclase es inútil. – BGerrissen

+1

No veo cómo, puedes simplemente crear prototipos agregando al objeto ya creado. –

0

Lo puede encontrar aquí Nokia WRT Plug-in for Visual Studio, un complemento para el desarrollador de widget nokia.

de Forum Nokia:

The Nokia WRT Plug-in for Visual Studio provides features that enable 
the creation, editing, testing, and deployment of WRT widgets from within 
Visual Studio. 
Cuestiones relacionadas