Definition und Erweiterung KlassenDefinition und Erweiterung Klassen
Problem Sie wollen eine wirksame Strategie für die Definition und Erweiterung der Klassen. Theory Eine Funktion ist ein Objekt, und wie frühere Rezepte zu illustrieren, ist es möglich, Associate Eigenschaften und Methoden mit einer Funktion. Warum ist es notwendig, Klassen zu erstellen, da Funktionen können in Klassen verwandelt werden? Die Antwort bezieht sich auf das Problem, herauszufinden, die Instanz der Funktion. Mit Hilfe von JavaScript Verschlüsse können Sie eine Funktion in einer Funktion zu definieren, wie im folgenden Code dargestellt. Quelle: / website / ROOT / ajaxrecipes / javascript / functionsareobjects.html Funktion GetFunctionFixed () (var inst = function (cmpval) (assertEquals (cmpval, inst.value);) return ds;) Durch die Verwendung einer lokalen Variablen kann die Instanz der Funktion innerhalb der Implementierung der Funktion verwiesen werden. Das funktioniert, weil Funktionen sind Objekte, Objekt verweisen und damit geschieht. Lösung Mit dem Grundsatz, dass die Funktionen sind Objekte, ist es möglich, ohne eine Klasse mit dem neuen Keyword zu erstellen, wie das folgende Beispiel, das auf die Funktion baut in Funktion dargestellt Technik. Quelle: / website / ROOT / ajaxrecipes / javascript / definingextendingclasses.html Funktion CreateClassInstance () (var inst = function () (inst.instantiated = 10; inst.method = function () (inst.instantiated = 20;)) inst (); return ds;) Im Beispiel der Klasse, ist ein "Klasse" geschaffen, weil es die Funktion die Eigenschaften der Funktion zuweisen. So wird die Funktion verhält sich wie ein "Klasse." Die Variable inst ist in der "Klasse verwiesen," die es ermöglichen, die Eigenschaften und Methoden der "Klasse reference." In der Tat ist die "Klasse" benimmt sich wie eine echte Klasse, wie aus der folgenden Test-Code. Quelle: / website / ROOT / ajaxrecipes / javascript / definingextendingclasses.html function_are_classes: function () (var CLS1 = CreateClassInstance (); info ( "function_are_classes", CLS1); cls1.value = 10;assertEquals (10, cls1.instantiated); cls1.method (); assertEquals (20, cls1.instantiated); var cls2 = CreateClassInstance (); assertEquals ( "undefined", typeof (cls2.value));), Der Test-Code Experimente mit verschiedenen Facetten zu zeigen, dass die instanziiert "Objekt" benehme sich wie ein Objekt. Die fett-Code zeigt, dass die "Objekte" CLS1 und cls2 in der Tat sind zwei getrennte Instanzen. Da scheint es so einfach, ein "Klasse" zu schaffen und ein "Objekt", warum gibt es ein neues Schlüsselwort? Die Antwort lautet: Weil herauszufinden, wie man Querverweis die Funktion zB mit der Methode wird nach der "Klasse" kompliziert wurde instanziiert, wie die folgenden Quelltext dargestellt. Quelle: / website / ROOT / ajaxrecipes / javascript / definingextendingclasses.html function_classes_generates_error: function () (var cls = CreateClassInstance (); cls.method2 = function () ( inst.instantiated = 40; )try ( cls.method2 ();testManager.failed ();) catch (e) (info ( "functions_classes_generates_error", "erwartet Ausnahme (" + ➥ e.toString () + ")");)), In einer zusätzlichen Prüfung, ist die "Klasse" instanziiert und für die CLS-Variable. Die CLS-Variable verweist auf ein "Objekt", die mit dem method2 Methode erweitert wird. Bei der Durchführung des method2, das "Objekt" verwiesen wird, beispielsweise mit Hilfe der variablen inst. Die inst Variable wurde gewählt, weil es definiert wurde, wenn die "wurde das Objekt" instanziiert. Ausführen des Codes wird eine Ausnahme zu erzeugen, weil inst nicht definiert ist. Um das Beispiel funktioniert, würde die Funktion von method2 bezogen auf Referenz-cls gehabt haben. Kurz gesagt, Verweisen auf die Instanz des "Objekt" innerhalb einer Funktion ist komplizierter, als es sein sollte. Die Lösung ist das neue Schlüsselwort, denn es verbindet die diese Kennung mit der Instanz des Objekts innerhalb einer Funktion. Rewriting the CreateClassInstance Code, um das neue Schlüsselwort verwenden, kommen wir zu dem CreateRealClassInstance Funktion, wie in der folgenden Code ein. Quelle: / website / ROOT / ajaxrecipes / javascript / definingextendingclasses.html Funktion CreateRealClassInstance () (var inst = function () (this.instantiated = 10; this.method = function () (this.instantiated = 20;)) return new inst ();) Vergleicht man CreateClassInstance und CreateRealClassInstance, der einzige wirkliche Unterschied ist, dass das neue Schlüsselwort verwendet wird, während Aufruf der inst Variable als eine Funktion, und inst ist mit diesem ersetzt. Mit dem neuen Schlüsselwort vor einer Funktion wandelt die Funktion in ein benutzerdefiniertes Objekt beispielsweise, wenn die Instanz des Objekts verwiesen werden kann mit dem diese Kennung innerhalb der Funktion. Das zurückgegebene Objekt-Instanz erweitert werden kann und die Instanz verwiesen wird über das Schlüsselwort , wie in den folgenden Test. Quelle: / website / ROOT / ajaxrecipes / javascript / definingextendingclasses.html function_instantiates_real_class: function () (var cls = CreateRealClassInstance (); cls.method2 = function () (this.instantiated = 40;) assertEquals (10, cls.instantiated); cls . method2 (); assertEquals (40, cls.instantiated);) Der Aufruf der Funktion CreateRealClassInstance, ist das zurückgegebene Objekt-Instanz in der CLS-Variablen zugewiesen. Das Objekt wird erweitert, um die method2 Methode sind, und bei der Umsetzung der method2 die Objekt-Instanz verwiesen Verwendung dieser Variablen. Dieses Mal, wenn method2 genannt wird, gibt es keine Ausnahme und die instanziiert Eigentum hat einen Wert von 40. Wenn Sie mit JavaScript vertraut sind und bereits instanziiert ein paar Sachen, dann in die vorige Instanziierung Syntax wahrscheinlich sieht ein wenig seltsam. Die klassische Art und Weise der Instanziierung eines Objekts in JavaScript ist wie folgt: Funktion MyObject () () var cls = new MyObject (); Dieser Ansatz beinhaltet eine Funktion definieren, wo die Funktion ist ein Konstruktor für das Objekt vom Typ MyObject. Wenn MyObject instanziiert wird, die Schreibweise ist sehr ähnlich zu der Instanziierung eines Typs in Java und C # und damit Programmierer, die instanziiert Typen in JavaScript nie in Frage, was wirklich passiert. Eine genauere Erklärung, wie ein Objekt in JavaScript definiert ist, wenn die inst Variable verwendet wurde, um ein Objekt zu instanziieren. Insbesondere ist ein Objekt, durch die Umwandlung einer Funktion in ein Objekt gebaut, und die Funktion mit dem neuen Schlüsselwort zugeordnet ist, der Konstruktor. Wenn die Manipulation JavaScript-Klassen, halten Sie die folgenden Punkte beachten: • Es ist möglich, JavaScript-Typen, ohne mit dem Schlüsselwort new erzeugen. Das Erstellen von Roh-JavaScript "Objekte" hat den Nachteil, daß die Cross-Reference "Objekt" beispielsweise mit der Funktion. • JavaScript-Objekte sind Typen, die Sie dynamisch zuweisen, so dass es möglich umzusetzen Prototyp-basierte Programmierung, wo das Verhalten des Typs wird zur Laufzeit ermittelt. • frühere Rezepte in diesem Artikel gezeigt, wie man Funktion Objekte zu manipulieren, ein Verfahren, das gilt auch für die Objekttypen JavaScript. • Die Grundlage für alle JavaScript-Objekte ist der Typ Object. • Wenn das neue Schlüsselwort verwenden, um eine Art instanziieren, kann der Prototyp-Eigenschaft mit der Funktion Objekt zugeordnet werden, um das Verhalten, dass alle Instanzen eines bestimmten Typs zu definieren gilt. 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 "Definition und Erweiterung der Klassen" 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: 490 users browsing the articles directory |
|
|