2011-01-11 3 views
-2
var objectTest= 
{ 
    test1: function() 
    { 
     val1 = 1; 
    }, 

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

objectTest.test2(); 
+0

Вы говорите, что он обращается к нему? –

+0

Этот вопрос не совсем понятен. – Pointy

+0

Вы отказались от этого? – Rudu

ответ

4

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

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

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

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

Но как это сделает 'val1' локальным для' test2() '? –

+0

Pekka! LTNS. Это то, что он спрашивает? – Rudu

1

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

0

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

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

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

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

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

Пример: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(), которая возвращает объект, который содержит функцию, которая ссылается на локальную переменную.

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