2012-08-29 26 views
5

Ich habe ein verschachteltes Objekt in Javascript, wie diese:Javascript verschachteltes Objekt Zugriff Root-Ebene

{ 
nameRoot: "my object", 
sub: { 
    nameSub: "my sub object" 
} 
} 

I nameRoot aus einer Funktion in Unter definiert zugreifen möchten.

Mit Hilfe einer Funktion i etwas wie definiert haben würde:

var self = this; 

und selbst verwendet, aber wie kann ich das tun, in einem wörtlichen Objekt?

+0

Ich glaube nicht, dass Sie können. Ich kenne den Post nicht von ganz oben, aber ich erinnere mich, dass ich das kürzlich auf StackOverflow gelesen habe. Können Sie dieses Objekt als Funktion anstelle eines Objektliterals definieren? – Brad

+2

Sie können nicht. Aber ein Objekt ist nicht ohne Bezug, also müssen Sie irgendwo einen Bezug zu dem Objekt haben, in dem Sie sich befinden, nein? – David

+1

Dies ist auch der Grund, warum Knoten und solche einen expliziten Verweis auf "parentNode" haben müssen. – voithos

Antwort

1

Mit dem folgenden Code können Sie eine Verknüpfung zu einem übergeordneten Element herstellen und vermeiden, dass das übergeordnete Element in einer For-in-Schleife angezeigt wird.

var parent = { a: 1 }; 
var child = { b: 2 }; 

Object.defineProperty(
    child, 'parent', 
    { value: parent, 
     enumerable: false } 
); 

parent.child = child; 

child.performAction = function() { 
    console.log(this.parent.a) // 1 
} 
0

Also der beste Weg, dies zu tun ist w/Funktionsumfang.

function myFunc(){ 
    this.nameRoot = "my object"; 
} 

dann könnte man so etwas wie:

var func = new myFunc(); 
func.sub = new myFunc(); 
func.sub.nameRoot = "my sub object"; 

Offensichtlich gibt es intelligentere Möglichkeiten, es zu tun (zum Beispiel den Namen durch die Funktion params passieren), aber dies ist das allgemeine Muster.

+0

Frage: _aber wie kann ich das in einem "literalen Objekt" tun? –

+0

Sie können nicht, deshalb habe ich gesagt, es so zu machen, wie ich es vorgeschlagen habe. – Paul

Verwandte Themen