2010-07-14 17 views
99

¿Es posible usar una variable en un archivo llamado first.js dentro de otro archivo llamado second.js?¿Puedo acceder a variables de otro archivo?

contiene una variable llamada colorcodes.

+0

¿por qué no fusionarlos? – Roki

+0

@Roki: por ejemplo, podría estar cargando datos de otro sitio web, mientras que el script para procesarlos está en su sitio: '< script src = "second.js"> ' – Piskvor

+0

el sitio de origen de datos no tiene una devolución de llamada? lo que quiero decir: second.js descarga contiene: ... función secondscriptFn (o) {// hacer algo /w de datos; } ... descarga http://datasource.example.net/first.js?callback=secondscriptFn luego la primera contiene: secondscriptFn ({volver: "# fff", frente: "# 888", con el lado: "# 369"}); más controlable y robusto que las versiones de alcance global, porque puede controlar el alcance de first.js ... – Roki

Respuesta

109

Como dijo Fermin, una variable en el alcance global debería ser accesible para todos los scripts cargados después de que se declare. También puede usar una propiedad de window o (en el ámbito global) this para obtener el mismo efecto.

// first.js 
var colorCodes = { 

    back : "#fff", 
    front : "#888", 
    side : "#369" 

}; 

... en otro archivo ...

// second.js 
alert (colorCodes.back); // alerts `#fff` 

... en su archivo html ...

<script type="text/javascript" src="first.js"></script> 
<script type="text/javascript" src="second.js"></script> 
+3

En un navegador, 'window' * es * el alcance global, por lo que window.colorCodes y el objeto (global) colorCodes es el mismo objeto. – Piskvor

+0

Verdadero ... el motivo por el que lo menciono es para los casos en los que necesita establecer una variable global desde un ámbito no global. –

4

Si almacena sus códigos de colores en una variable global, debería poder acceder a ellos desde cualquiera de los archivos javascript.

+0

¿Puedes mostrar un código de ejemplo? –

+1

@edwardtorvalds - ver respuesta aceptada, por ejemplo, – Fermin

9

Esto debería funcionar - definir una variable global en primerarchivo y acceda desde el segundo archivo:

<script src="/firstfile.js"></script> 
<script src="/secondfile.js"></script> 

firstfile.js:

var colors = { 
    text:'#000000', 
    background:'#aaaaaa', 
    something_else:'blue' 
}; 

secondfile.js:

do_something_with(colors.background); 

Tenga en cuenta que el orden en que se cargan los archivos de script es significativo para algunos navegadores (IE6 a ciencia cierta, tal vez otros)

+1

Puede necesitar adjuntar esa variable al objeto como: this.colors = colors. Si es un objeto en lugar de una enumeración, puede hacer una función para simplemente devolver el valor. this.getTextColor = function() {return colors.text; }; – aggaton

+0

¡Sí! El comentario de la orden fue correcto en –

+1

¿cómo se actualizaría una variable de una página cargada? no parece funcionar. – v3nt

3

me encontré con amplify.js . Es realmente simple de usar. Para almacenar un valor, vamos a llamarlo "myValue", que hace:

amplify.store("myKey", "myValue") 

Y para acceder a ella, lo hace

amplify.store("myKey") 
5

Me gustó lo answer above dijo pero aunque, no trabajado conmigo

porque estaba declaring estas variables inside jQuery $(document).ready()

así que asegúrese de declarar sus variables dentro de la etiqueta <script> no en otro

0

un sitio que puede estar haciendo esto un poco diferente. No estoy seguro de por qué uso esta sintaxis, la copié de algún libro hace mucho tiempo. Pero cada uno de mis archivos js define una variable. El primer archivo, sin ninguna razón en absoluto, que se llama R:

var R = 
    { 
     somevar: 0, 
     othervar: -1, 

     init: function() { 
      ... 
     } // end init function 

     somefunction: function(somearg) { 
      ... 
     } // end somefunction 

     ... 

    }; // end variable R definition 


    $(window).load(function() { 
     R.init(); 
    }) 

Y luego si tengo un gran trozo de código que quiero separar, lo puse en un archivo separado y un nombre de variable diferente, pero aún puedo hacer referencia a las variables y funciones R.Llamé a la nueva TD por ninguna razón en absoluto:

var TD = 
    { 
     xvar: 0, 
     yvar: -1, 

     init: function() { 
      ... 
     } // end init function 

     sepfunction: function() { 
      ... 
      R.somefunction(xvar); 
      ... 
     } // end somefunction 

     ... 

    }; // end variable TD definition 


    $(window).load(function() { 
     TD.init(); 
    }) 

Se puede ver que donde en el TD 'sepfunction' que llamo el R.somefunction. Me doy cuenta de que esto no da ninguna eficiencia de tiempo de ejecución porque ambos scripts necesitan cargarse, pero me ayuda a mantener mi código organizado.

Cuestiones relacionadas