У меня есть функция foo
которая содержит bar
. Можно ли получить доступ к bar
от внешней функции с кодом в его текущем состоянии (т.е. Не изменять ничего внутри foo
).
По моему мнению, это невозможно, так как bar
видима только для foo
. Моим решением было бы создать get()
, который извлекал бы bar
.
var foo = function() {
var bar = {
a : 'a',
b : 'b'
};
};
Невозможно получить доступ к bar
не возвращая его. Вам нужно будет охватить его выше foo
:
var bar = {
a : 'a',
b : 'b'
};
var foo = function() {
// do stuff with bar
};
или иметь bar
возврата foo
var foo = function() {
var bar = {
a : 'a',
b : 'b'
};
return bar;
};
var otherBar = foo();
Вы правы, в его текущей форме единственным способом доступа к переменной столбца будет метод доступа. Но в зависимости от того, как вы хотите реализовать этот код, вы можете объявить переменную bar как свойство объекта foo.
Это будет выглядеть примерно так:
var foo = function() {
this.bar = {
a: 'a',
b: 'b'
}
}
var baz = new foo();
baz.bar.a; //returns 'a'
Нет bar
в частном порядке в вашем примере выше. Если вы хотите получить доступ к bar
, вам нужно будет предоставить доступ, как вы предлагаете, например, getBar()
.
Как говорили другие, вы не можете, но если все пути считаются :), вы можете получить бар таким образом:
<script type="text/javascript">
var foo = function () {
var bar = {
a: 'a',
b: 'b'
};
};
var haha = function () {
var evalBar = foo.toString().match("var bar[^}]*};")[0];
eval(evalBar);
console.log(bar);
}
haha();
</script>
bar - это локальный объект, видимый только из области действия foo, поэтому вы правы. бар недоступен извне, если ваша функция foo не возвращает функцию для доступа к ней, поэтому ваш выбор, чтобы реализовать геттер, звучит об approriate.
Лучший.
bar
...