2017-07-17 3 views
1

Ich möchte eine leere Datenklasse in JS definieren, um sie anschließend mit JSON zu füllen. In C# würde ich so etwas tun:JavaScript Klassendefinition ohne Instanziierung

class Person { 
    string name; 
    int age; 
    Person[] children; 
    var whatever; 
} 

Dies funktioniert nicht, wird die IDE es nicht mag: "Unexpected Token Ein Konstruktor, Methode Accessor oder wurde Eigenschaft erwartet".

Ich habe

versucht
class Person { 
    var name; 
    var age; 
    var children; 
    var whatever; 
} 

aber ich habe keine Erfahrung mit JS, und überall sehe ich, dass deklarierten Variablen direkt definiert sind.

Ich verstehe den Fehler nicht, da ich glaube, dass diese Eigenschaften sind, und ich kenne nicht das Verhalten des JSON-Deserializers in Bezug auf Arrays von Objekten, wissen, dass Objekte in JSON möglicherweise fehlen, aber ich würde noch Sie möchten, dass sie im JS-Objekt deklariert (aber nicht gesetzt) ​​werden.

Wie kann ich die Dinge funktionieren lassen?

+0

Obwohl JavaScript-Objekt-orientierte ist, spielt es keine wirklichen Klassen haben. Es hat stattdessen eine prototypische Vererbung. Lesen Sie über OOP in JavaScript auf dem [MDN] (https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects). – PeterMader

+0

Welche Version von JavaScript verwenden Sie? – Thatkookooguy

Antwort

3

Sie müssten eine object statt einer Klasse erstellen und dann die Eigenschaften ausfüllen, wenn Sie Ihre JSON erhalten.

sollten Sie so etwas wie verwenden:

var Person = { 
    name: '', 
    age: '', 
    children: '', 
    whatever: '' 
} 

Sie können dann auf die Eigenschaften des Person Objekt mit Person.name usw.

Deserialisieren wird so einfach sein wie

Person = FunctionThatGivesYouAPersonObjectInJSON(); 
+0

Danke für die schnelle Antwort :) – Saryk

+0

Kein Problem, ich erlitt das gleiche Schicksal, als ich von C# rüberzog, damit es nach Hause klingelt :) –

+0

Wie erkläre ich dem Deserializer, dass die "Kinder" -Eigenschaft ein Array von "Person" -Objekten ist ? Woher weiß ich, dass das Objekt Person verwendet wird, um die Daten zu füllen? - Saryk vor 8 Minuten – Saryk

0

JSON die für Java Script-Objekte verwendete Notation, sodass Sie diese Variablen nicht in einer Klasse speichern müssen. Speichern Sie es einfach in einem normalen Objekt. Wenn Sie beispielsweise ein JSON-Objekt von einer Jax-Anforderung erhalten, können Sie es als normale Variable speichern.

Verwenden Sie einfach dieses Objekt.

+1

[Es gibt kein JSON-Objekt] (http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/) – Andreas

0

Sie definieren eine Klasse auf diese Weise.

class Person{ 
constructor(name, age, children, whatever) { 
    this._name = name; 
    this._age = age; 
    this._children = children; 
    this._whatever = whatever; 
    } 
} 

Instanziieren Sie dies.

var chris = new Person('Chris', 25, 2, 1) 
+0

Genau das ist mein Punkt: Ich tue nicht Ich möchte es selbst instantiieren, und ich kenne das Verhalten des JSON-Deserializers nicht, da ich nicht glaube, dass es einen Klassenkonstruktor aufrufen würde. – Saryk

+1

OP wollte ein Objekt erstellen * ohne * es instanziieren zu müssen. –

+0

Verwenden Sie die Antwort von @ JayGould – VIX

0

In ECMAScript6 können Sie Klassen mit JavaScript implementieren: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes

So werden Sie Ihren Code ändern müssen:

class Person{ 
    constructor(age, name) { 
    this.age = age; 
    this.name = name; 
    } 
} 

Auch Problem in Ihrem IDE-Einstellungen sein könnten. Normalerweise können Sie in der IDE auswählen, welche Sprachversion Sie verwenden möchten. Für das Beispiel in WebStorm können Sie in den Einstellungen wählen:

enter image description here

Verwandte Themen