Pregunta

var objectTest=
{
    test1:  function( )
    {
       val1 = 1;
    },

    // hows accessing the 
    test2:  function( )
    {
       alert( val1 );
    }
};

objectTest.test2( );
¿Fue útil?

Solución

Al no utilizar el prefijo var la variable se pone en distinto alcance intento (global) en su lugar:

test1: function() {
 var val1=1;
},

Como @Pekka señala, tu ejemplo (arriba) requiere la convocatoria de objectTest.test1(); primero (para crear val1) de lo contrario obtendrá un error. Si desee para acceder a la variable de ambos lugares, entonces usted debe utilizar en lugar de un objeto-propiedad (como DW @patrick sugiere) que no añade al ámbito mundial

objectTest.test1();
objectTest.test2(); //Shows: Alert-1
alert(val1); //Shows: Alert-1
val1=2;
objectTest.test(2); //Shows: Alert-2

Otros consejos

No se puede. Dos funciones no se pueden ejecutar al mismo tiempo, lo que podrá compartir ámbito local es posible si la forma en que muestras. Usted tendría que definir val1 como miembro del objeto.

Depende de lo que en última instancia quiere hacer. Se podría hacer que sea un miembro del público del objeto:

Ejemplo: http://jsfiddle.net/wqr6W/

var objectTest=
{
    val1: 'someDefault',
    test1:  function( )
    {
       this.val1 = 1;
    },

    // hows accessing the 
    test2:  function( )
    {
       alert( this.val1 );
    }
};
objectTest.test1( );
objectTest.test2( );

Por supuesto, esto cambia su código original. Lo que realmente se necesita para hacer dependerá de su circunstancia.

O esto:

Ejemplo: http://jsfiddle.net/wqr6W/1/

var objectTest=
{
    val1: 'someDefault',
    test1:  function( )
    {
       this.val1 = 1;
    },

    // hows accessing the 
    test2:  function( )
    {
       this.test1();
       alert( this.val1 );
    }
};
objectTest.test2( );

La adición de otra respuesta con el fin de manera más directa a responder la pregunta.

Si en realidad se está hablando de un locales variable a una función, la respuesta simple es que pueda no acceso que a menos que que pase una función de la función que tiene la variable, lo que hace referencia a la variable.

Esto se conoce como la creación de un cierre.

Ejemplo: http://jsfiddle.net/csd3s/

var objectTest=
{
    test1:  function( )
    {
       var val1 = 1;
       return {getVal:function() {
           return val1;
       }};
    },

    // hows accessing the 
    test2:  function( )
    {
       alert( this.test1().getVal() );
    }
};

objectTest.test2( );

Así test2 su interior se puede llamar a la función test1(), que devuelve un objeto que contiene una función, que hace referencia a la variable local.

Eso (o algo similar) es lo que se necesita hacer referencia a una variable local de otro modo no accesible en una función.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top