2016-08-04 11 views
-1

Gegeben etwas wie folgt aus:Wie kann ein Objekt einen Wert erben?

data = {'car': {'name': 'Mazda'}, 'year': 2006}; 

Gibt es eine Möglichkeit zum „2006“ Wert zu erhalten data.car.name.year

verwende ich versucht, das Attribut des Mutter zu verwenden wenn ein Objekt selbst dieses Attribut fehlt. Ich sah int Prototyping, aber es scheint nicht zu sein?

Wie kann man in anderen Welten auf Werte zugreifen, die auf einer übergeordneten Ebene definiert sind, wenn sie nicht auf der angeforderten Ebene verfügbar sind?

+2

Ihre Struktur gesehen, Um "2006": data.year "Mazda" zu erhalten: data.car.name Sie sollten ein wenig über JSON gelesen Machen Sie sich mit Elementverschachtelung vertraut. – technico

+0

In diesem Fall sind "Auto" und "Jahr" keine Kinder von Daten, sondern eher Eigenschaften, die auf diese Weise keine hierarchische Beziehung haben. Die Art von "Auto" ist selbst ein Objekt, das keine Beziehung zu Daten hat. – Alan

+0

Angesichts Ihrer vorhandenen Struktur, kann es nicht getan werden, da ein Objekt von vielen anderen Objekten oder Variablen referenziert werden kann, so dass es keine Möglichkeit geben würde, zu wissen, welche Sie wollen. Mit der prototypischen Vererbung würde es auch nicht funktionieren, weil sie nicht zirkulär sein können. Sie können einen expliziten Zirkelverweis für das Objekt selbst erstellen, aber dann benötigen Sie eine Eigenschaft, die dem verschachtelten Objekt hinzugefügt wird. –

Antwort

0

Der Grund, warum Sie data.car.name.year nicht tun können, liegt an den Regeln von JSON. Wenn du das durchkreuzt, kannst du es ein bisschen besser sehen.

OPTION 1:

data = {'car': 
    { 
     'name': 'Mazda' 
    }, 
    'year': 2006 
}; 

Jetzt können Sie sehen, dass, wenn Sie car zugreifen zu können, dann auf das Objekt gerichtet sind, es mit name darin enthält. Behandeln Sie es wie eine Ordnerstruktur auf Ihrem Computer.

/Auto/name = { 'name': 'Mazda'} /Auto/Jahr = 2006

Vielleicht ist das, was Sie stattdessen wollen:

data = { 
    'car': 
    { 
     'name': 'Mazda', 
     'year': 2006 
    } 
}; 

Sie data.car.year tun können diese Weise

Option 2:

data.car.name.year = data.year Dies w ill duplizieren Sie die Eigenschaft auf dem Objekt, aber dann können Sie es als data.car.name.year

Eine weitere komplexe Art und Weise verwenden:

Sie können von anderen Objekten in haben Javascript-Objekte erben. Ich würde vorschlagen, für ES6-Klassen oder TypeScript zu gehen.

Beide müssen in Javascript kompiliert werden, um in den meisten Browsern für die neuesten Funktionen ausgeführt zu werden.

Von Typoskript tiefen Tauchgang:

class Point3D extends Point { 
    z: number; 
    constructor(x: number, y: number, z: number) { 
    super(x, y); 
    this.z = z; 
} 
add(point: Point3D) { 
    var point2D = super.add(point); 
    return new Point3D(point2D.x, point2D.y, this.z + point.z); 
    } 
} 

Hier ist eine ähnliche gerade JS Implementierung

var Point3D = (function (_super) { 
    __extends(Point3D, _super); 
    function Point3D(x, y, z) { 
    _super.call(this, x, y); 
    this.z = z; 
} 
Point3D.prototype.add = function (point) { 
    var point2D = _super.prototype.add.call(this, point); 
    return new Point3D(point2D.x, point2D.y, this.z + point.z); 
}; 
    return Point3D; 
})(Point); 
+0

Können Sie mir bitte sagen, warum ich abgelehnt wurde? Ich würde gerne etwas konstruktives Feedback hören. Tue mein Bestes, um dir zu helfen :) – joncodo

+1

Objekte, die von anderen Objekten erben, sind alles andere als schmerzhaft 'var child = Object.create (parent)', und es gibt noch andere Möglichkeiten. Obwohl die gestellte Frage angesichts der beschriebenen Struktur ist, kann auf ein referenzierendes Objekt von dem referenzierten Objekt zugegriffen werden, und die Antwort ist * nein *, und es hat nichts mit JSON zu tun, was eine textbasierte Datenübertragung ist Format. –

+0

Ich stimme zu, dass es bei weitem nicht schmerzhaft ist. Ich werde das umschreiben. – joncodo

1

Wenn Sie Jahr erhalten möchten („2006“) des Objekts Sie wie folgt zugreifen müssen :

data.year 

Aber es wird empfohlen, Ihr Objekt zu ändern:

data = {'car': {'name': 'Mazda','year': 2006}}; 

und Zugang:

data.car.year 
+0

Das ist nicht, was die Frage fragt. – Alan

+3

Hi, fragte nach "Gibt es einen Weg, um den" 2006 "-Wert mit data.car.name.year zu bekommen" Ich sage das mit diesem Objekt nein, weil es eine andere Struktur hat – imazzara

+0

Die Frage ist nicht klar , aber was er eigentlich fragt, ist nicht, wie man "2006" bekommt, sondern wie man auf Werte zugreift, die auf einer übergeordneten Ebene definiert sind. – Alan

Verwandte Themen