Turning toSource in einer vollständigen Lösung SerialisierungProblemSie wollen ein Update auf toSource zu einem vollständigen Serialisierung Lösung. Theory Mozilla hat eine sehr kluge Methode entwickelt, wiederum als toSource. Mit toSource, ist es möglich, den Zustand eines Objekts in einen Puffer zu serialisieren. Betrachten Sie die folgenden Typdeklaration Beispiel. Quelle: / website / ROOT / Ajax / Javascript / tosource.html Funktion DefinedClass () (this.localvalue = 10; this.localmethod = function (param) (info ( "DefinedClass.localmethod", "rief mich");)) Die DefinedClass Typ hat eine localmethod Verfahren und eine localvalue Datenelement definiert. Wenn der Typ instanziiert wird, die instanziiert toSource Typ hat eine Methode, die aufgerufen werden kann, wie im folgenden Quellcode dargestellt. Quelle: / website / ROOT / Ajax / Javascript / tosource.html var cls = new DefinedClass (); cls.prototypemethod.value = 100; info ( "mozilla_tosource", cls.toSource ()); Wenn toSource genannt wird, ist die folgende Puffer erzeugt: (Localvalue: 10, localmethod: (function (param) (info ( "DefinedClass.localmethod", "rief mich ");})) Die erzeugten Puffer ist ein serielles Form eines Objekt-Instanz. Vermisst von der Serialisierung ist der Typ-Definition. Wenn das Objekt beispielsweise wird neu erstellt, neu ist der Zustand des Objekts. Doch das ist nicht ganz wahr, denn die folgenden Prototyp Erklärung toSource verfehlt wird. Quelle: / website / ROOT / Ajax / Javascript / tosource.html DefinedClass.prototype.prototypevalue = new StaticClass ();
Alles, was über die DefinedClass.prototype Eigenschaft wird durch die Umsetzung toSource verfehlt deklariert wird. Fehlende Basis Eigenschaften und Methoden sinnvoll, wenn die toSource Puffer wurden, einen Hinweis auf die Art, dass die Instanz erstellt wurden, enthalten. Dennoch gibt es keinen Hinweis mit fehlenden Methoden und Eigenschaften, und keine Unterstützung auf jedem anderen Browser als Mozilla / Firefox. Also, was ist der Einsatz von toSource? ToSource Die Methode selbst ist begrenzt, aber die Idee hinter toSource ist gut. Wir wollen, dass die Fähigkeit, ein Objekt für den späteren Verzehr serialisieren, und wird in späteren Artikeln angezeigt werden, Serialisierung ist der Schlüssel zur Umsetzung verschiedener objektorientierten Techniken, wie Mixins. Da durch die Umsetzung von Mozilla toSource dargestellt, kann Serialisierung verschiedenen Facetten haben . Vor dem Beginn einer Implementierung von Serialisierung, wir ermitteln den verschiedenen Kontexten der Serialisierung: • Plain Vanilla Serialisierung wie toSource: Die Standard-Serialisierung von Mozilla besteht, liegen keine anderen Browsern. Für diese Web-Anwendungen, die toSource tun, es muss eine Implementierung für andere Browser. Nicht Serialisieren der Prototyp-Eigenschaften ist nützlich, wenn Sie auf die zusätzlichen Informationen zu serialisieren und nicht die Basisinformation. • Ausführliche Erklärung zB Serialisierung: Ein komplettes Beispiel Serialisierung ist, wenn alle Methoden, Eigenschaften und Daten-Mitglieder sind in einem Puffer, der, wenn es ausgeführt wird, wird komplett neu erstellt das Objekt umgewandelt. Wenn die Instanz neu erstellt wird, ist die ursprüngliche Art Informationen verloren. • Staatliche Instanz Serialisierung: Im Gegensatz zu anderen Serialisierungen sind staatliche Serialisierung der Erzeugung eines Puffers, dass nur der Zustand eines Objekts enthält, die Funktion Erklärungen werden nicht generiert. Die JavaScript Object Notation (JSON)-Protokoll ist ein Beispiel für eine Instanz Stand nur Serialisierung. Bei der Serialisierung der Instanz Staat, Datenelemente in der Prototyp-Eigenschaft definiert sind inbegriffen. • Variablenzuweisung Serialisierung: Ein komplettes Beispiel Erklärung Serialisierung enthält alle den Zustand einer Objekt-Instanz, aber die Funktion Eigenschaften fehlen, weil sie nicht oft benutzt. Wenn eine Funktion Eigenschaft verwendet wird, wird die serialisiert Staat hat die Aufgabe einer Variablen zugewiesen werden, sonst ist es sehr schwierig zu funktionieren Eigenschaften zuweisen. • Object-oriented Serialisierung: Object-oriented Serialisierung ist eine Erweiterung der Plain-Vanilla-Serialisierung. Der Grund für die Definition einer objektorientierten Serialisierung ist die Trennung von Klasse-Daten und beispielsweise Daten zu ermöglichen. Mit objektorientierten Serialisierung, kann ein Objekt serialisiert und wieder mit verschiedenen Standard-Verhalten erstellt. Jeder der Kontexte ist eine besondere Variante der Serialisierung. Das gemeinsame Merkmal aller der Kontexte ist, dass sie die gleichen Informationen und filtern heraus, was nicht notwendig ist, zu serialisieren. Zum Beispiel, Plain-Vanilla-Serialisierung filtert alle Eigenschaft verwiesen von Prototypen. Staat Serialisierung filtert alle Funktionen, sondern durchläuft Eigenschaften von Prototypen verwiesen wird. Lösung Als ersten Schritt erstellen wir eine allgemeine "serialize alles" Umsetzung. Die Umsetzung wird alles serialisieren Filterfunktionen und Output-Generation Control-Fähigkeiten umfassen. Mit der allgemeinen Serialisierung erfordert einiges an Verständnis für die Serialisierung Prozess, damit die Feinabstimmung möglich ist. In einem zweiten Schritt werden wir die Serialisierung Umfeld umzusetzen sind mit den entsprechenden Filter-Implementierungen. Serialisieren alles bedeutet Iteration alles, was im Objekt-Instanz gespeichert ist, und dann fragte der Anrufer, wenn sie auf OK, um die Informationen zu serialisieren. Von einem hohen Niveau, das alles serialisieren Funktion ist wie folgt implementiert. In der serialize alles Funktionalität, zwei Stücke der Funktionalität wurden aus Gründen der Übersichtlichkeit ausgeschnitten und werden von den Stellungnahmen wird darauf hingewiesen / / Für Klarheit entfernt. Quelle: / website / root / scripts / Common.js serialisieren: function (obj, Rückrufe) (var buffer = "("; var comma = function () (comma = function () (return "";) return "";) var quoteProperties = ""; var canProcessFilter = function () (return true;) var functionPropertyCallback = function () () var callingStack; if (typeof (arguments [2]) == "undefined") (callingStack = new Array () ; callingStack.push ( "cls");) else (callingStack = arguments [2];) if (Rückrufe) (/ / für Klarheit entfernt) for (Eigenschaft in obj) (if (canProcessFilter (obj [Eigenschaft], obj, Eigentum)) (switch (typeof (obj [property])) (/ / für Klarheit entfernt))) buffer + = ")" return buffer;) Die serialize Funktion hat zwei Parameter, aber für bestimmte Kontexte (später erklärt) gibt es einen dritten Parameter. Der dritte Parameter hat aufgehört, um nicht den Menschen, die die Funktion verwenden möchten, zu verwechseln. Der erste Parameter, obj, stellt das Objekt-Instanz, die serialisiert wird. Der zweite Parameter, Rückrufe, stellt die Anpassung Methoden, die aufgerufen werden, wenn die Daten serialisiert wird. Bis die Schleife gestartet wird mit dem Schlüsselwort for, Variablen initialisiert werden. Sie sind wie folgt definiert: • Puffer: Diese Variable wird verwendet, um den vollständigen Text, dass die Serialisierung Objekt repräsentiert zu schaffen. • Komma: Diese Variable verwendet die Technik, die in Artikel 2-7 dargelegt, um festzustellen, ob ein Komma benötigt wird bei der Erstellung der JavaScript-Objekt-Format serialisiert. Als Referenz, falsche Erklärung jede Eigenschaft in einem Objekt-Format serialisiert (zB (prop1: true;, prop2:)) ist mit einem Komma getrennt. Die Funktion führt eine Technik, bei der zum ersten Mal heißt es, kein Komma ist notwendig, aber für jede Aufforderung danach ein Komma notwendig ist. Ohne den Einsatz der Technik in Artikel 2-7, eine Entscheidung blockieren und die Flagge nötig wären. • quoteProperties: Diese Variable besagt, ob der Puffer ein doppeltes Anführungszeichen enthält. Das Zitat wird verwendet, wenn das Objekt serialisieren JSON-Format. • canProcessFilter: Diese Variable ist eine Callback-Funktion, die für jede Eigenschaft Wert mit dem Namen gefunden wird. Die Callback gibt, die entweder wahr oder falsch Eigenschaft serialisieren, um eine Immobilie zu ignorieren. Der Rückruf hat drei Parameter: Eigenschaft, die tatsächlichen Eigentums Referenz; obj, das Objekt, das serialisiert und propertyIdentifier die Zeichenfolge Kennung des Objektes. • functionPropertyCallback: Diese Variable ist eine Callback-Funktion, die aufgerufen wird, wenn die Iteration der Eigenschaften einer Funktion. Die Eigenschaften der Funktion kann nicht in den Puffer-Variablen gespeichert werden, da die Serialisierung Format nicht für die Definition der Funktion Eigenschaften zu ermöglichen. Die Eigenschaften einer Funktion müssen Sie nach der Definition des serialisierten JavaScript-Objekt-Kanal zugewiesen werden. Deshalb ist die vollständige Serialisierung ein JavaScript-Objekt eine Variable Definition erfordert. • callingStack: Um eine Funktion in einer anderen Eigenschaft Erklärung eingebetteten JavaScript-Objekt zuweisen, benötigen Sie den serialisierten Objektreferenz (zB variable.embeddedobj. Function.value). Um den Verweis zu erstellen, einen Stack verwendet wird, wobei jedes Element im Stack ist eine Objekt-Referenz. Nach den Erklärungen, werden die Eigenschaften des Objekts durchlaufen (für (property. ..) in einer Schleife. Bevor wir uns die Details der Loop, dann behandle ich die fehlenden Callback-Initialisierung. Quelle: / website / root / scripts / Common.js if (Rückrufe) (if (callbacks.canProcessFilter) (canProcessFilter = callbacks.canProcessFilter;) if (callbacks.functionPropertyCallback) (functionPropertyCallback = callbacks.functionPropertyCallback;) if (callbacks.variablename) ( callingStack.pop (); callingStack.push (callbacks.variablename);) if (callbacks.quoteProperties) (if (callbacks.quoteProperties == true) (quoteProperties = "\" ";))) Der Aufrufer der Serialisierung muss nicht um einen Wert für Rückrufe geben. Wenn kein Wert angegeben, wird eine Standard-Serialisierung alles angenommen, mit Ausnahme der Funktion Eigenschaften. Die Funktion Eigenschaften werden nicht serialisiert, denn es gibt keine Möglichkeit, in der JavaScript-Objekt serialisiert Format zu assoziieren eine Funktion Objekt mit der Funktion. Mehr des Codes werden in Kürze erläutert. Die Serialisierung hat vier Callback-Funktionen: • canProcessFilter: Wird verwendet, um festzustellen, ob die Eigenschaft serialisiert werden können. • functionPropertyCallback: aufgerufen, wenn eine Funktion Eigenschaft serialisiert wird. • variableName: Stellt die variable Kennung verwendet, wenn eine Serialisierung auf eine Variable erzeugt wird. • quoteProperties: Stellt einen Wert dar, wenn auf true erzeugt Anführungszeichen um das Eigentum Kennung gesetzt. Dies ist typischerweise bei der Erzeugung einer Serialisierung für JSON-Format. Nun, da wir bei der Initialisierung Details sah, lassen Sie uns auf die Serialisierung Logik untersuchen zu bewegen. Die Schleife wird für das Serialisieren von der Objekt-Instanz zuständig, und die Einzelheiten der Schleife wurden verkürzt. Zu diesem Zeitpunkt werde ich die allgemeine Strategie zu erklären. In JavaScript kann jedes Mitglied Methoden und Daten auf ein Objekt unter Verwendung der folgenden Notation zugegriffen werden: obj.datamember = ... Diese Schreibweise ist die häufigste Art und Weise der Zugriff auf eine Methode oder Datenelement beim Schreiben von Quellcode. Für die Serialisierung Zwecke, die Notation ist nicht sinnvoll, da der Programmierer zu erwarten ist, zu wissen, was die einzelnen Methoden und Daten-Mitglieder sind. Für die Serialisierung Zwecke, ist die Reflexion erforderlich. Reflection in JavaScript ist eine Zwei-Schritt-Prozess: 1. Der String value-Eigenschaft Identifikatoren sind verfügbar mit einer Aufzählung und mit einer Schleife durchlaufen (z. B. für (Eigenschaft in obj)). 2. Die tatsächliche Eigenschaft zugegriffen wird mit einem Array-Schreibweise, in der die Anordnung ist die Objekt-Instanz und der Index ist der String-Wert Eigenschaft Kennung (z. B. obj [property]). Wie jede Eigenschaft wird iteriert, die Serialisierung ersten Abfragen, wenn die Immobilie durch den Aufruf der Callback-Funktion canProcessFilter serialisiert werden. Wenn die Eigenschaft serialisiert werden, dann eine switch-Anweisung heißt, dass Tests der Art der Immobilie. Der typeof-Funktion gibt sechs verschiedene Kennzeichen, von denen fünf von Interesse sind (wir sind nicht zu undefinierten interessiert, als undefined sollten nicht serialisiert). Die Einzelheiten der switch-Anweisung sind wie folgt. Quelle: / website / root / scripts / Common.js switch (typeof (obj [property])) (case "boolean": buffer + = Komma () + + quoteProperties Eigentum quoteProperties + + ":" + Objekt [Eigenschaft]; break; case "Funktion": buffer + = Komma () + + quoteProperties Eigentum quoteProperties + + ":" + obj [Eigenschaft]. toString (); callingStack.push (property); functionPropertyCallback (obj [Eigenschaft], obj, des Vermögens, Rückrufe , callingStack); callingStack.pop (); break; case "number": buffer + = comma callingStack.push () + + quoteProperties Eigentum quoteProperties + + ":" + obj [Eigenschaft]; break; case "Objekt": ( property); Puffer + = Komma () + + quoteProperties Eigentum quoteProperties + + ":" + ops.serialize (obj [Eigenschaft], Rückrufe, callingStack); callingStack.pop (); break; case "string": buffer + = Komma () + + quoteProperties Eigentum quoteProperties + + ":" + Objekt [Eigenschaft]; break;) Bei der Durchführung der switch-Anweisung, haben die Typen-Nummer, String und Boolean eine einfache Serialisierung Umsetzung. Die Serialisierung von diesen Typen der Konvention folgen, [property identifier]: [property value]. Funktion und Gegenstand sind komplizierter. Wenn ein Objekt gestoßen, dann ein eingebettetes JavaScript-Objekt Serialisierung steht, und die ops.serialization Funktion rekursiv aufgerufen. Das Ergebnis der Serialisierung ist eine Eigenschaft Wert, der dem Puffer zugesetzt wird, um an den Aufrufer zurückgegeben werden. Die übrigen Teile des serialize Funktion fügen Sie eine Klammer zu schließen Sie die Serialisierung und die erzeugte Puffer an den Aufrufer zurückgeben. Die vorgestellten Serialisierung abgeschlossen ist, und jeder von den Kontexten verwendet die Serialisierung für ihren eigenen generiert Puffer erzeugen. Betrachten wir die Umsetzung der Serializer.toSource Funktion, die den Mozilla toSource Serialisierung imitiert. Dies bedeutet, dass jede Funktion oder Daten-Mitglied als Teil des Prototyps Eigenschaft definiert nicht verarbeitet wird. Was wird gefragt wird, ob eine Eigenschaft serialisiert sollte mit Hilfe eines Filters werden. Die vollständige Umsetzung der Serializer.toSource folgt. Quelle: / website / root / scripts / Jaxson / commons.js Serializer.toSource = function (obj) (return ops.serialize (obj, (currProcessedObject: null, iterPrototype: null, canProcessFilter: function (Eigenschaft, currObj, propertyIdentifier) (if ( this.currProcessed! = currObj) (GetPrototypeObject (currObj, function (Prototyp) (this.iterPrototype = Prototyp;)); this.currProcessed = currObj;) if (typeof (iterPrototype) == "object") (for (prototypeIdentifier in iterPrototype) (if (prototypeIdentifier == propertyIdentifier) (return false;))) return true;)));) Bei der Durchführung des Serialize. toSource ist eine einzelne Methode aufrufen, und es ist zu ops.serialize. Standardmäßig ops.serialize wird alles serialisieren, und dass vermieden werden sollte. Um in der Lage, zwischen einer Instanz Eigenschaft und eine Eigenschaft von der Prototyp-Eigenschaft definiert zu unterscheiden, hat die Umsetzung canProcessFilter, um herauszufinden, welche Eigenschaften mit der Instanz verbunden sind. In der canProcessFilter Implementierung der Methode ist ein Verweis auf GetPrototypeObject. GetPrototypeObject ist ein Convenience-Funktion verwendet werden, um den Prototyp dieses Objekt mit dem Objekt abzurufen. Ich behandle die Umsetzung der GetPrototypeObject kurz. Im Moment wollen wir, was in den Filter zu konzentrieren. Wenn ops.serialize aufgerufen wird, wird sie durchlaufen die Eigenschaften des toSerialize Objekt. Wenn eine Immobilie gefunden ist, wird die benutzerdefinierte Filter canFilterProcess Funktion aufgerufen. canFilterProcess hat als zweiten Parameter an das Objekt, auf die die bald-to-be-serialisiert Eigentum gehört. Quelle: / website / root / scripts / Jaxson / commons.js Funktion GetPrototypeObject (obj, callback) (if (typeof (obj.constructor) == "function") (var funcMatch = / function \ s (.*) \ (/Var result = obj.constructor.toString (). Match (funcMatch); if (result! = Null) (if (typeof (Rückruf) == "function") (var iterobj; if (typeof (result [1]) == "string") (eval ( "var prototypePropery =" + result [1] + ". Prototyp;"); callback (prototypePropery, result [1]);))))) Bei der Durchführung des GetPrototypeObject, der erste Test ist die Überprüfung, ob die obj.constructor Eigentum tatsächlich existiert. Wenn die Funktion nicht vorhanden ist, dann gibt es keinen Konstruktor, und es gibt keine Notwendigkeit, um fortzufahren. Wenn die Funktion vorhanden ist, dann einen regulären Ausdruck wird verwendet, um den Namen der Funktion zu extrahieren. Der reguläre Ausdruck in dem Codebeispiel ist fett dargestellt und wird als regulärer Ausdruck, weil der Schrägstriche anerkannt. Bei der Verwendung von regulären Ausdrücken im Zusammenhang mit der ein String ist, ist das Match-Funktion aufgerufen und gibt die Ergebnisse des Spiels. Wenn es Ergebnisse sind, dann eine Kennung festgestellt wird, dass die Bezugnahme der Prototyp-Eigenschaft verwendet werden kann. Aber ein Text-Puffer und kein Objekt gefunden wird. Der Text Puffer hat, um in ein Objekt umgewandelt werden, indem Sie die Eval-Anweisung. Die dynamisch ausgeführt Puffer weisen die lokal deklarierte prototypeProperty den Verweis auf die Eigenschaft prototype. Dann mit einem Code-Block werden die Objekt-Eigenschaft und die Kennung an den Aufrufer übergeben. Ein weiterer Zusammenhang ist die Serialisierung eines Objekts Instanz, die auch nur Staat und keine Funktionen. Ohne Sehen Sie noch den Code, können Sie wahrscheinlich erraten, was der Filter funktioniert. Der Filter-Code prüft, ob die Eigenschaft, die gefiltert werden, ist eine Funktion Objekt. Wenn die Eigenschaft ist eine Funktion, Gegenstand, dann die Immobilie nicht gefiltert werden. Und in der Tat, dass, wie der Filter Code geschrieben ist, wie in der folgenden Liste angezeigt wird. Quelle: / website / root / scripts / Jaxson / commons.js Serializer.toSourceState = function (obj) (return ops.serialize (obj, (canProcessFilter: function (Eigenschaft, obj, propertyIdentifier) ( if (typeof (Innen) == "function") (return false;) else (return true;))));) Der kühne Code zeigt, wie die Art des Prüflings mit dem Operator typeof. Ein weiterer Zusammenhang ist die Serialisierung des Staats zu JSON Notation. Serialisieren zu JSON Serialisierung ist wie in einen Zustand, es sei denn, dass die Eigenschaft haben Identifikatoren Anführungszeichen um sie herum. Die Serialisierung-Code ist identisch mit dem Staat Serialisierung-Code, es sei denn, dass die Daten quoteProperties Mitglied auf true gesetzt ist. Quelle: / website / root / scripts / Jaxson / commons.js Serializer.toSourceJSON = function (obj) (return ops.serialize (obj, ( quoteProperties: true,canProcessFilter: function (Eigenschaft, obj, propertyIdentifier) (if (typeof (Innen) == "function") (return false;) else (return true;))));) Nach Prüfung der letzten drei Serialisierung Kontexte sind, denken Sie vielleicht, dass der Code ist relativ ähnlich, aber die Ergebnisse sind sehr unterschiedlich. Dies ist ein Beispiel dafür, wie Code-Blöcke können verwendet werden, um die allgemeine Iteration von einer bestimmten Verarbeitung zu trennen. Ein weiterer Serialisierung Zusammenhang, dass man dies nicht auf toSource ähnelt nutzen wird, nicht Serialisierung mit einem Verweis. Der Kontext dieser Serialisierung ist wie folgt. Sie erstellen ein System, in dem eine Art dient als grundlegende Funktionalität. Nachdem instanziiert Art, sind Anpassungen durchgeführt. Dann sind Sie entscheiden, das Objekt serialisieren, aber Sie möchten nur die Anpassungen serialisieren, der Grund ist, dass, wenn das Objekt wieder auf einem anderen Computer oder Programm erstellt haben, möchten Sie eine andere Basis-Funktionalität verwendet werden. So konnte der gleichen Klasse arbeiten mit unterschiedlichen Basis-Funktionalitäten. Die Lösung ist nicht serialisieren die Prototyp-Eigenschaften und dann ein Puffer, der die Art instanziiert generieren. Hinweis Ich erkläre nicht um die Umsetzung der anderen Serialisierung Zusammenhang Typen, weil sie nicht zeigen, nicht jede neue Techniken. Ich behandle nur, wie man GetPrototypeObject in einem anderen Kontext und komplizierter Filter-Code verwenden. Wenn Sie an weiteren Informationen, werfen Sie einen Blick auf die Test-Code in die Datei / website / ROOT / ajax Artikeln interessiert sind / javascript / tosource.html, insbesondere die Prüfverfahren jaxson_tosource_oo. Serialisierung in JavaScript scheint eine einfache Sache und die toSource Methode sieht äußerst nützlich. Doch wie in diesem Artikel beschrieben wird toSource unvollständig. Wenn Sie JavaScript-Code schreiben zu serialisieren, halten Sie die folgenden Punkte beachten: • Serialisierung in JavaScript Mittel, um einen Puffer, der in der JavaScript-Objekt formatiert ist zu generieren. • In diesem Artikel haben wir nicht, wie Sie neu erstellen Objekt serialisiert. Dies liegt daran, dies zu tun benötigt nur das Bestehen der Puffer an die eval-Anweisung und die Zuordnung der Ergebnisse der eval zu einer Variablen. • Serialisierung hat viele verschiedene Kontexte. Die ops.serialize Funktion implementiert einen sehr allgemeinen Serialisierung werden muss spezialisiert. • Bei der Serialisierung, gibt es keine Typ-Information. Zum Eingeben von Informationen haben, müssen Sie sie zu extrahieren und dann speichern Sie es irgendwo. Denken Sie daran, dass JavaScript ein Prototyp-basierte Programmiersprache, und JavaScript-Typen sind in verschiedenen Konzept im Vergleich zu den Typen in Sprachen wie C # und Java. • Dieser Artikel ist Serialisierung Techniken zeigen, wie man einen Algorithmus, der Code-Blöcke verwendet, um eine allgemeine Iteration Code-Block von einem spezifischen Kontext Code-Block getrennt zu definieren. Ein Artikel eingereicht von Sonja Lande Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle. Wichtig: Dieser Artikel "Turning toSource zu einem vollständigen Serialisierung Solution" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.
|
|||||
| Online: 511 users browsing the articles directory |
|
|