Как получить доступ к переменной в функции [дубликата]

0

У меня есть функция foo которая содержит bar. Можно ли получить доступ к bar от внешней функции с кодом в его текущем состоянии (т.е. Не изменять ничего внутри foo).

По моему мнению, это невозможно, так как bar видима только для foo. Моим решением было бы создать get(), который извлекал бы bar.

var foo = function() {
    var bar = {
        a : 'a',
        b : 'b'
    };
};
  • 0
    возврат bar ...
Теги:

5 ответов

1
Лучший ответ

Невозможно получить доступ к 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();
1

Вы правы, в его текущей форме единственным способом доступа к переменной столбца будет метод доступа. Но в зависимости от того, как вы хотите реализовать этот код, вы можете объявить переменную bar как свойство объекта foo.

Это будет выглядеть примерно так:

var foo = function() {
  this.bar = {
    a: 'a',
    b: 'b'
  }
}

var baz = new foo();

baz.bar.a; //returns 'a'
1

Нет bar в частном порядке в вашем примере выше. Если вы хотите получить доступ к bar, вам нужно будет предоставить доступ, как вы предлагаете, например, getBar().

1

Как говорили другие, вы не можете, но если все пути считаются :), вы можете получить бар таким образом:

<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>
1

bar - это локальный объект, видимый только из области действия foo, поэтому вы правы. бар недоступен извне, если ваша функция foo не возвращает функцию для доступа к ней, поэтому ваш выбор, чтобы реализовать геттер, звучит об approriate.

Лучший.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню