2010-07-16 14 views
9

Ahora, creo un archivo .js con muchas funciones y luego lo vinculo a mis páginas html. Eso funciona, pero quiero saber cuál es la mejor manera (buenas prácticas) para insertar js en mis páginas y evitar conflictos con el alcance ... Gracias.JavaScript: alcance global

+1

http: //javascript.crockford.com/code.html – Anders

Respuesta

1

Quizás no sea la MEJOR manera, pero muchos sistemas PHP (te estoy mirando, Drupal) toman el nombre de su plugin particular y lo anteponen a todos los nombres de sus funciones. Podría hacer algo similar, agregar el nombre de su capacidad a los nombres de sus funciones: "mything_do_action()"

Alternativamente, podría adoptar un enfoque más "OO", crear un objeto que encapsule su capacidad y agregar todo sus funciones como miembro funciones en TI. De esa forma, hay una sola cosa en el ámbito global de la que preocuparse.

+0

Estoy tratando de aprender OO con JavaScript pero es difícil para mí. Hay mucha sintaxis para hacer una simple "clase" o cualquier otra cosa en JavaScript :) Gracias. – thomas

6

La mejor manera es crear un nuevo alcance y ejecutar allí su código.

(function(){ 
    //code here 
})(); 

Esto se utiliza mejor cuando se tiene acceso al alcance global como mínimo.

Básicamente, esto define una función anónima, le da un nuevo alcance y la llama.

+0

¿Qué significa "()"? ¿Algún enlace sobre eso? ¿Y qué hay de window.onload? ¿Dónde debería poner eso? ¿Hay algo de práctica tipo bootstrap en JavaScript? Gracias. – thomas

+0

Personalmente, creo que es más fácil entender una función anónima si lo ves todo en una línea. Desafortunadamente no tengo saltos de línea en los comentarios, pero si lo piensas de esta manera: es como ejecutar una función ya existente, pero en lugar de usar el nombre de la función, colocas la definición de la función entre corchetes. – lucideer

+0

Puede hacer esto, por ejemplo: (function (param) {/ * * /}) ('param value'); – lucideer

9

Una idea simple es utilizar un objeto que representa el espacio de nombres:

var NameSpace = { 
    Person : function(name, age) { 

    } 
}; 

var jim= new NameSpace.Person("Jim", 30); 
12

Usted puede envolver en una función anónima como:

(function(){ /* */ })();

Sin embargo, si tiene que volver a utilizar todas las funciones de javascript que ha escrito en otros lugares (en otros scripts), es mejor que cree un único objeto global al que se pueda acceder. O bien como:

var mySingleGlobalObject={}; 
mySingleGlobalObject.someVariable='a string value'; 
mySingleGlobalObject.someMethod=function(par1, par2){ /* */ }; 

o la alternativa, la sintaxis más corta (que hace lo mismo):

var mySingleGlobalObject={ 
    someVariable:'a string value', 
    someMethod:function(par1, par2){ /* */ } 
};

Esto entonces se puede acceder más tarde a partir de otras secuencias de comandos como:

mySingleGlobalObject.someMethod('jack', 'jill');
+0

Creo que es más seguro envolver siempre tu código con (function() {/ * * /})(); solo en caso de que incluyas un script que está mal terminado. Entonces, supongo que podría agregar su mySingleGlobalObject al "documento", por ejemplo, para compartirlo con otros scripts. – endavid

Cuestiones relacionadas