2012-08-29 12 views
5

Ho un oggetto nidificato in JavaScript come questo:Javascript livello principale nidificato accesso agli oggetti

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

voglio accedere nameRoot da una funzione definita in sub.

Utilizzando una funzione avrei definito qualcosa di simile:

var self = this; 

e utilizzato sé, ma come posso fare questo in un oggetto letterale?

+0

Non credo che si possa. Non conosco il post, ma mi ricordo di averlo letto su StackOverflow di recente. Puoi definire quell'oggetto come una funzione, invece di un oggetto letterale? – Brad

+2

Non puoi. Ma un oggetto non è privo di riferimenti, quindi da qualche parte devi avere un riferimento all'oggetto in cui ti trovi, no? – David

+1

Questo è anche il motivo per cui i nodi e tali devono avere un riferimento esplicito a 'parentNode'. – voithos

risposta

1

Il seguente codice consente di collegarsi a un elemento genitore ed evitare che il genitore mostri in un ciclo for-in.

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

Quindi il modo migliore per farlo è w/funzione.

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

allora si potrebbe fare qualcosa di simile:

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

Ovviamente ci sono modi più intelligenti per farlo (ad esempio passare il nome tramite la funzione params), ma questo è il modello generale.

+0

Domanda: _ma come posso farlo in un "oggetto letterale" _ –

+0

Non puoi, ecco perché ho detto di farlo nel modo che ho suggerito. – Paul

Problemi correlati