5 Stimmen

JavaScript-Bereich: Verweis auf ein übergeordnetes Objektmitglied aus der Schließung eines untergeordneten Mitglieds

Neueinsteiger in JavaScript hier.

Wie referenziere ich ein Mitglied foo von innen Mitglied foobar vorausgesetzt, dass foobar ist in einem Verschluss?

var priv = {

    foo: "bar",

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

};

Der obige Code schlägt fehl. Darin, this.foo ist undefined . Wenn ich ändere this.foo zu priv.foo ist es immer noch undefined . Wie referenziere ich priv.foo aus dem foobar Abschluss?

2voto

meze Punkte 14706

Es ist unmöglich, irgendwelche Eigenschaften eines Objekts in seiner Definition während seiner Initialisierung zu lesen, da prev wird zu diesem Zeitpunkt nicht definiert sein. Wenn Sie versuchen, ein Clojure darin aufzurufen, verweist es auf undefinierte this または priv .

Wahrscheinlich wollten Sie schreiben:

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

ohne () am Ende. Und dann könnte man es so nennen priv.foobar();

Wenn Sie es trotzdem aufrufen müssen, können Sie Folgendes definieren foobar nach foo :

var priv = {
    foo: "bar"
};

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

0voto

Justin Punkte 82143

Das Problem ist, dass Sie keinen Abschluss definieren - ich glaube nicht, dass es eine Möglichkeit gibt, auf foo aus Ihrer Funktion als priv ist noch nicht initialisiert.

Was genau versuchen Sie zu tun? Das Folgende ist äquivalent zu dem, was ich verstehe, dass Ihr Beispiel versucht zu tun, aber meine Vermutung ist, dass ich das Problem nicht verstehe:

// Set elsewhere
var foo = "bar";

var priv = {
    foo: foo ,
    foobar: foo == "bar"
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X