2016-06-01 11 views
-1

Ich kann eine Eigenschaft der ersten Ebene nur finden, aber es wird nicht zulassen, dass ich eine 'Tönung' Eigenschaft unter Farbe zugreifen. Normalerweise würden Sie einfach den Punkt verwenden, zu dem Niveau, das Sie erreichen möchten, aber es funktioniert nicht für mich.Zugreifen auf geschachtelte Eigenschaften in Funktionen über Arrays: Javascript

obj = new Object(); 

obj.color.tint = "brick red"; 

alert(obj.color); 

var arr = []; 

arr[0] = obj; 

alert(arr[0].color.tint); 
+0

arbeitet. Sie können die Entwicklerkonsole (F12 drücken) zum Debuggen in der Zukunft überprüfen. – 4castle

Antwort

0

obj = new Object(); 
 

 
obj.color = new Object(); // Try add this line 
 

 
obj.color.tint = "brick red"; 
 

 
alert(obj.color); 
 

 
var arr = []; 
 

 
arr[0] = obj; 
 

 
alert(arr[0].color.tint);

Ich bin nicht sicher "über die Aussage würden Sie benutzen Sie einfach den Punkt Sie zu welcher Ebene wollen erreichen "

Grundsätzlich dreht sich bei Javascript alles um Objekte, und Sie können die Punktnotation verwenden, um auf ein vorhandenes Objekt zuzugreifen.

können Sie zugreifen obj.color ist, weil Sie obj als ein Objekt an erster Stelle initialisieren.

So ähnlich, wenn Sie Eigenschaften unter obj.color setzen mögen, haben Sie obj.color als ein neues Objekt zuerst initialisieren, dann können Sie obj.color.* auf Ihrem Wunsch zugreifen

2
obj.color.tint = "brick red"; 

Dieser Teil wird scheitern, weil color existiert nicht. JavaScript "füllt" die Lücken nicht automatisch. Sie müssen zuerst color als Objekt definieren, bevor Sie ihm tint zuweisen.

var obj = {}; 
obj.color = {}; 
obj.color.tint = 'brick red'; 

Auch kann dies vereinfacht werden:

var obj = { 
    color: { 
    tint: 'brick red' 
    } 
}; 
+0

Vielen Dank –

+0

@ Shinji-san Beachten Sie, dass die Verwendung von 'new Object()' ist eine schlechte Praxis. Es ist besser, das Objektliteral '{}' zu verwenden, damit Sie keine Überraschungen bekommen, falls ein anderer Code (zB eine Bibliothek) den 'Object.prototype' modifiziert. – 4castle

0

Sie können keine Kettenpunktnotation erstellen verschachtelte Elemente, da color nicht an dem Punkt definiert ist, an dem Sie versuchen, auf seine Eigenschaft zuzugreifen;

eingene Art und Weise, es zu tun:

var obj = new Object(); 
obj.color = {}; 
obj.color.tint = 'tint'; 

Oder:

var obj = new Object(); 
obj.color = {tint:'tint'}; 
+0

Danke und was, wenn ich eine Stütze zum Farbton hinzufügen möchte, wäre es nicht color.tint = {Transparenz: 50}; oder obj.color.tint = {Transparenz: 50}; Alle diese wären immer noch Objekte von 'obj', oder? –

+0

@ Shinji-San Sie können so lange nisten, wie Sie möchten. 'obj.my_properties = {Visuals: {Farbe: {Farbton: 'Rot'}}}' – hlfrmn

0

Sie können keine Eigenschaften zuweisen zu einem nicht vorhandenen Objekt. Zuerst müssen Sie dieses Objekt erstellen. Manchmal ist dies jedoch eine Notwendigkeit. Nehmen wir an, Sie möchten diese Array-Objektstruktur dynamisch haben. Ich hatte eine Objektmethode entwickelt, das accomplist die Object.prototype.setNestedValue() ist, die wie folgt Dieser Code gibt einen Fehler

Object.prototype.setNestedValue = function(...a) { 
 
    a.length > 2 ? typeof this[a[0]] === "object" && this[a[0]] !== null ? this[a[0]].setNestedValue(...a.slice(1)) 
 
                     : (this[a[0]] = typeof a[1] === "string" ? {} : new Array(a[1]), 
 
                     this[a[0]].setNestedValue(...a.slice(1))) 
 
       : this[a[0]] = a[1]; 
 
    return this; 
 
}; 
 

 
var arr = [].setNestedValue(0,"color","tint","brick red"); 
 
console.log(JSON.stringify(arr));

Verwandte Themen