2009-06-09 18 views
6

Estoy trabajando en un proyecto en el que estamos haciendo una gran cantidad de JavaScript personalizados y especialmente jquery, en un proyecto de estilo mvc.¿Cuál es una buena manera de refactorizar un número creciente de funciones javascript/jquery?

El único problema es que sigo añadiendo más y más globales funciones/variables y están acumulando. Tengo algunos archivos pero no estoy seguro de cómo dividir algunas de las cosas en archivos separados.

He pensado componer algunas de estas funciones y variables globales en objetos, pero la sintaxis del objeto en javascript me parece un poco incómoda (debido a la ausencia de clases clásicas). Aunque si tuviera un buen ejemplo a seguir tal vez podría dar la vuelta.

¿Cómo lidiar con un proyecto en el que las funciones y variables globales javascript empiezan a acumular así?

+0

No creo que la sintaxis del objeto JavaScript pueda describirse razonablemente como un hack. En todo caso, es la parte más elegante del lenguaje. Si quieres decir que tratar de calzar las clases es doloroso, no podría estar más de acuerdo contigo. Es un lenguaje orientado a objetos, no un lenguaje basado en clases. – Nosredna

Respuesta

11

Una forma muy sencilla a acumular un montón de variables globales y funciones en un único objeto global:

// Awful pile of globally-scoped names 
var foo = 1 
var bar = 2 
function go = function(){ 
    console.log('Yeehaw!'); 
} 


// Instead, just dump everything into a global-level object 
var MyApp = { 
    foo: 1, 
    bar: 2, 
    go: function(){ 
     console.log('Yeehaw!'); 
    } 
} 

// Now access stuff like this 
console.log(MyApp.foo); 
console.log(MyApp.bar); 
MyApp.go(); 

Para las variables y funciones "simple" de alto nivel, puedo recomendar este. Hay muchas mejoras que se pueden hacer a esto, pero probablemente caerán dentro de la categoría de optimizaciones prematuras; este es un gran primer paso.

+0

Solución muy limpia. Usaré ese enfoque en mi javascript. +1 – ichiban

+0

Esto es lo que hago también. –

+0

Sí. Y los métodos de MyApp tendrán acceso a todo lo demás en MyApp a través de "esto".Cualquier cosa fuera de MyApp usará el prefijo MyApp en lugar de esto. Se aplica a cualquier cosa activada por un evento o temporizador también. – Nosredna

1

Se podía separarlos de manera similar a lo que hace ... jquery.ui por categorías o por la acción de control/

ejemplo:

effects.blind.js
effects.bounce.js
ui.accordion.js

¿pueden ser divididas en los controles que tienen que ver con?

O por lo que hacen?

sólo algunas sugerencias ...

+0

Gracias por las sugerencias. –

2

Los Crockford vídeos en YUI teatro son un buen ejemplo de cómo configurar espacios de nombres de JavaScript entre otras cosas.

+0

¡Algunos buenos videos, gracias! –

Cuestiones relacionadas