var objectTest=
{
test1: function()
{
val1 = 1;
},
// hows accessing the
test2: function()
{
alert(val1);
}
};
objectTest.test2();
ответ
Не используя префикс 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
Но как это сделает 'val1' локальным для' test2() '? –
Pekka! LTNS. Это то, что он спрашивает? – Rudu
Он не может , Две функции не могут работать одновременно, поэтому совместная локальная область невозможна так, как вы показываете. Вы должны определить val1
как часть объекта.
В зависимости от того, что вы в конечном счете хотите сделать. Вы могли бы сделать его публичным членом объекта:
Пример: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();
Добавление другого ответа для более прямого ответа на этот вопрос.
Если вы на самом деле говорите о локальной переменных в функцию, простой ответ в том, что вы можете не доступа к нему если вы передаете функцию из функции, которая имеет переменную, которая делает ссылку к переменной.
Это называется создание замыкания.
Пример: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()
, которая возвращает объект, который содержит функцию, которая ссылается на локальную переменную.
Это (или что-то подобное) - это то, что требуется для ссылки на не доступную локальную переменную в функции.
Вы говорите, что он обращается к нему? –
Этот вопрос не совсем понятен. – Pointy
Вы отказались от этого? – Rudu