Как локальная переменная функции может быть доступна в другой функции - PullRequest
0 голосов
/ 11 января 2011
var objectTest=
{
    test1:  function( )
    {
       val1 = 1;
    },

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

objectTest.test2( );

Ответы [ 4 ]

4 голосов
/ 11 января 2011

Не используя префикс var, переменная помещается в другую (глобальную) область, вместо этого попробуйте:

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

Как указывает @Pekka, ваш пример (выше) требует сначала вызова objectTest.test1(); (для создания val1), в противном случае вы получите ошибку. Если вы хотите получить доступ к переменной из обоих мест, тогда вам лучше использовать свойство объекта (как предлагает @patrick dw), которое не добавляет к глобальной области действия

objectTest.test1();
objectTest.test2(); //Shows: Alert-1
alert(val1); //Shows: Alert-1
val1=2;
objectTest.test(2); //Shows: Alert-2
1 голос
/ 11 января 2011

Не может.Две функции не могут работать одновременно, поэтому совместное использование локальной области невозможно, как вы показываете.Вы должны определить val1 как член объекта.

0 голосов
/ 11 января 2011

Добавление другого ответа для более прямого ответа на вопрос.

Если вы на самом деле говорите о локальной переменной функции, простой ответ заключается в том, что вы можете не доступ к нему , если вы не передадите функцию из функции, которая имеет переменную, которая делает ссылку на переменную.

Это называется созданием замыкания.

Пример: 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( );

Так что внутри test2 вы можете вызвать test1() функция, которая возвращает объект, содержащий функцию, которая ссылается на локальную переменную.

Это (или что-то подобное) требуется для ссылки на недоступную в противном случае локальную переменную в функции.

0 голосов
/ 11 января 2011

Зависит от того, что вы в конечном итоге хотите сделать.Вы можете сделать его публичным членом объекта:

Пример: 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( );

Это, конечно, меняет ваш исходный код.То, что вам действительно нужно сделать, будет зависеть от ваших обстоятельств.

Или это:

Пример: 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( );
...