programación programacion poo polimorfismo orientado orientada objetos lista herencia es6 javascript oop

programacion - ¿Las mejores prácticas de Javascript orientado a objetos?



programacion orientada a objetos javascript (6)

Usando `var` o no

Debería introducir cualquier variable con la declaración var , de lo contrario, llega al ámbito global.

Vale la pena mencionar que en modo estricto ( "use strict"; ) las asignaciones de variables no declaradas lanzan ReferenceError .

En la actualidad JavaScript no tiene un ámbito de bloqueo. La escuela de Crockford te enseña a poner sentencias var al principio del cuerpo de la función , mientras que la Guía de estilo de Dojo lee que todas las variables deben declararse en el menor alcance posible . (La declaración y la definición de let introducidas en JavaScript 1.7 no forman parte del estándar ECMAScript).

Es una buena práctica vincular las propiedades de los objetos utilizados regularmente a las variables locales, ya que es más rápido que buscar en toda la cadena de alcance. (Consulte Optimización de JavaScript para obtener un rendimiento extremo y un bajo consumo de memoria ).

Definiendo cosas en el archivo, o en un `(function () {...}) ()`

Si no necesita alcanzar sus objetos fuera de su código, puede envolver todo el código en una expresión de función, se llama patrón del módulo. Tiene ventajas de rendimiento y también permite que su código se minimice y se oculte a un nivel alto. También puede asegurarse de que no contamine el espacio de nombres global. Las funciones de ajuste en JavaScript también le permiten agregar un comportamiento orientado a aspectos. Ben Cherry tiene un artículo en profundidad sobre el patrón del módulo .

Usando `this` o no

Si usa la herencia pseudo-clásica en JavaScript, difícilmente puede evitar usar this . Es una cuestión de gusto el patrón de herencia que usas. Para otros casos, consulte el artículo de Peter Michaux sobre widgets de JavaScript sin "esto" .

Usando `function myname ()` o `myname = function ();`

function myname() es una declaración de función y myname = function(); Es una expresión de función asignada a la variable myname . La última forma indica que las funciones son objetos de primera clase, y puede hacer cualquier cosa con ellas, como con una variable. La única diferencia entre ellos es que todas las declaraciones de funciones se elevan a la parte superior del alcance, lo que puede ser importante en ciertos casos. De lo contrario son iguales. function foo() es una forma abreviada. Se pueden encontrar más detalles sobre la elevación en el artículo de alcance y elevación de JavaScript .

Definición de métodos en el cuerpo del objeto o utilizando "prototipo".

Tu decides. JavaScript tiene cuatro patrones de creación de objetos: pseudo-clásico, prototípico, funcional y partes ( Crockford, 2008 ). Cada uno tiene sus pros y sus contras, vea a Crockford en sus charlas en video o consiga su libro The Good Parts como ya sugirió Anon .

Marcos

Le sugiero que elija algunos marcos de JavaScript, estudie sus convenciones y estilo, y encuentre las prácticas y los patrones que mejor se adapten a usted. Por ejemplo, el kit de herramientas Dojo proporciona un marco robusto para escribir código JavaScript orientado a objetos que incluso admite herencia múltiple.

Patrones

Por último, hay un blog dedicado a explorar patrones de JavaScript comunes y anti-patrones . También revisa la pregunta ¿Hay algún estándar de codificación para JavaScript? en desbordamiento de pila.

Me estoy encontrando codificando un gran proyecto en Javascript. Recuerdo que la última fue toda una aventura porque hacky JS puede volverse ilegible rápidamente y quiero que este código esté limpio.

Bueno, estoy usando objetos para construir una biblioteca, pero hay varias formas de definir cosas en JS, lo que implica consecuencias importantes en el alcance, la gestión de la memoria, el espacio de nombres, etc. EG:

  • utilizando var o no;
  • definiendo cosas en el archivo, o en (function(){...})() , estilo jquery;
  • utilizando this , o no;
  • usando la function myname() o myname = function() ;
  • definir métodos en el cuerpo del objeto o usar "prototipo";
  • etc.

Entonces, ¿cuáles son realmente las mejores prácticas al codificar en OO en JS?

Explicaciones académicas realmente esperadas aquí. Enlace a los libros una calurosa bienvenida, siempre y cuando se trate de calidad y robustez.

EDITAR:

Obtuve algunas lecturas, pero todavía estoy muy interesado en las respuestas a las preguntas anteriores y en las mejores prácticas.


A menudo me siento como el único chico aquí que usa MooTools para mi javascript.

Es sinónimo de M y O bject O riented Tools, mootools.

Me gusta mucho su versión de OOP en javascript. También puedes usar su implementación de clase junto con jquery, así que no tienes que deshacerte de jquery (aunque mootools lo hace todo igual).

De todos modos, dale una buena lectura al primer enlace y mira lo que piensas, el segundo enlace es a los documentos de mootools.

MooTools & Herencia

Clases de MooTools



Es posible que desee revisar Secretos de JavaScript Ninja por John Resig (jQuery). "Este libro tiene la intención de tomar un desarrollador de JavaScript intermedio y darle el conocimiento que necesita para crear una biblioteca de JavaScript de varios navegadores, desde el principio, hacia arriba".

El borrador está disponible a través del editor: http://www.manning.com/resig/

Douglas Crockford también tiene algunos buenos artículos de JavaScript en su página de inicio: http://www.crockford.com/


Primero debe leer acerca de la programación basada en prototipos para que sepa con qué tipo de bestia está tratando y luego eche un vistazo a la guía de estilo de JavaScript en MDC y la página de JavaScript en MDC . También encuentro mejor forzar la calidad del código con una herramienta, es decir. JavaScript Lint u otras variantes.

Las mejores prácticas con OO suenan más como si desea encontrar patrones que concentrarse en la calidad del código, así que busque en la búsqueda de Google: patrones de javascript y patrones de jQuery .


Voy a escribir algunas cosas que leí o puse en aplicación ya que hice esta pregunta. Así que la gente que lo lea no se frustrará, ya que la mayoría de las respuestas son de RTMF disfrazadas (aunque debo admitir que los libros sugeridos SON buenos).

Uso de var

Se supone que cualquier variable ya se ha declarado en el ámbito superior en JS. Entonces, cuando quiera una nueva variable, declárela para evitar sorpresas desagradables, como manipular una var global sin darse cuenta. Por lo tanto, utilice siempre la palabra clave var.

En una marca de objeto, var la variable privada. Si solo desea declarar una variable pública, use this.my_var = my_value para hacerlo.

Declarando métodos

En JS, son numerosas las formas de declarar métodos. Para un programador OO, la forma más natural y eficiente es usar la siguiente sintaxis:

Dentro del cuerpo objeto

this.methodName = function(param) { /* bla */ };

Hay un inconveniente: las funciones internas no podrán acceder a "esto" debido al alcance divertido de JS. Douglas Crockford recomienda omitir esta limitación utilizando una variable local convencional llamada "eso". Así se convierte

function MyObject() { var that = this; this.myMethod = function() { jQuery.doSomethingCrazy(that.callbackMethod); }; };

No confíe en el final de línea automático.

JS intenta agregar automáticamente ; Al final de la línea si lo olvidas. No confíe en este comportamiento, ya que obtendrá errores que son un desastre para depurar.