Область JavaScript: ссылка на элемент родительского объекта из замыкания дочернего элемента - PullRequest
5 голосов
/ 04 мая 2011

Новичок в JavaScript здесь.

Как мне ссылаться на элемент foo изнутри foobar, если foobar находится в закрытии?

var priv = {

    foo: "bar",

    foobar: (function() {
        return this.foo === "bar";
    })()

};

Theкод выше не удается.В нем this.foo есть undefined.Если я изменю this.foo на priv.foo, это все равно undefined.Как мне сослаться на priv.foo из закрытия foobar?

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

Невозможно прочитать какие-либо свойства объекта в его определении во время его инициализации, так как prev будет неопределенным в это время.Когда вы пытаетесь вызвать внутри него clojure, это относится к неопределенному this или priv.

Возможно, вы хотели написать:

foobar: (function() {
    return this.foo === "bar";
})

без () вконец.И тогда вы могли бы назвать его как priv.foobar();

Если вам все еще нужно позвонить, вы можете определить foobar после foo:

var priv = {
    foo: "bar"
};

priv.foobar = (function() {
    return priv.foo === "bar";
})()
0 голосов
/ 04 мая 2011

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

Что именно вы пытаетесь сделать? Следующее эквивалентно тому, что я понимаю, ваш пример пытается сделать, но я думаю, что я не понимаю проблему:

// Set elsewhere
var foo = "bar";

var priv = {
    foo: foo ,
    foobar: foo == "bar"
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...