#javascript #scope
#javascript #область действия
Вопрос:
Новичок в JavaScript здесь.
Как мне ссылаться на элемент foo
изнутри элемента foobar
, учитывая, что foobar
он находится в закрытии?
var priv = {
foo: "bar",
foobar: (function() {
return this.foo === "bar";
})()
};
Приведенный выше код завершается ошибкой. В нем this.foo
есть undefined
. Если я изменю this.foo
на priv.foo
, это все равно undefined
. Как мне ссылаться priv.foo
изнутри foobar
закрытия?
Комментарии:
1. вы действительно хотите вызвать свое закрытие? Я бы попытался удалить
()
после})
2. К сожалению, я делаю.
foobar
на самом деле это несколько десятков строк. :/3. Я объяснил в своем ответе ниже
Ответ №1:
Невозможно прочитать какие-либо свойства объекта в его определении во время его инициализации, поскольку prev
в это время они не будут определены. Когда вы пытаетесь вызвать clojure внутри него, это ссылается на undefined this
или priv
.
Вероятно, вы хотели написать:
foobar: (function() {
return this.foo === "bar";
})
без ()
в конце. И тогда вы могли бы вызвать это как priv.foobar();
Если вам все еще нужно его вызвать, вы могли бы определить foobar
после foo
:
var priv = {
foo: "bar"
};
priv.foobar = (function() {
return priv.foo === "bar";
})()
Ответ №2:
Проблема в том, что вы не определяете закрытие — я не думаю, что есть какой-либо способ получить доступ foo
из вашей функции, поскольку priv
она еще не инициализирована.
Что именно вы пытаетесь сделать? Следующее эквивалентно тому, что, как я понимаю, пытается сделать ваш образец, но я предполагаю, что я не понимаю проблему:
// Set elsewhere
var foo = "bar";
var priv = {
foo: foo ,
foobar: foo == "bar"
};
Комментарии:
1. В итоге у меня есть гигантский JS-файл. Он определяет некоторые частные переменные и общедоступный объект. Я пытаюсь инкапсулировать эти частные переменные в один объект, но каждая частная переменная, за исключением одной, зависит от значения другой частной переменной. Итак, вместо этого предположим, что
foobar
это динамическое вычисление во время выполнения, основанное на значенииfoo
. Имеет смысл?