Das Verständnis der Verzweigungen Duck Eingetragen CodeDas Verständnis der Verzweigungen Duck Eingetragen Code
Problem Sie wollen, wo man am besten verwenden Duck Typing und die Probleme, die Sie sollten, wenn es zu benutzen. Theory Es gibt einen Unterschied zwischen einem bewusst, verstehen Werttyp und ein Referenz-Typ in JavaScript. Selbst für einen Referenz-Typ, es gibt einen Unterschied zwischen der Definition der Referenz als einen Wert oder eine reine Referenz. Sollten Sie aber auch egal, über den Unterschied? Ist es etwas, was Sie brauchen, um zu beachten? Es ist, wenn Sie versuchen, etwas Bestimmtes. JavaScript tun, ist eine eindeutige Sprache, dass es Ente Art, latente Typ und Prototyp-Eigenschaften. Um einen Typ in JavaScript erstellen, können Sie den Typ über ein Prototyp-Definition definieren, oder Sie können Definition der Methoden und Eigenschaften durch die Zuordnung einer Klasse-Instanz. In der Regel haben Sie die Möglichkeit, dynamisch Draht zusammen Typen zur Laufzeit. Es gibt zwei Möglichkeiten zur Implementierung von Duck Typing: Wertetypen und Referenztypen. Sie müssen sich von beiden bewusst sein, obwohl in diesem Artikel Imostly value-type Duck Typing verwenden. Ich sage nicht, man ist besser als die anderen nur, dass jedes hat Vorteile und Nachteile. Entwickler neigen dazu, einen über wählen Sie die andere auf der Grundlage ihrer Programmplanung Gewohnheiten. Zum Beispiel, bevorzuge ich Wert Duck Typing, weil ich auf Objekte für eine spätere Verwendung serialize neigen. Solution Lassen Sie uns ein Beispiel für Duck Typing mit Referenzwerten zu gehen. Betrachten Sie den folgenden Code, der verwendet wird, um eine Funktion ohne Parameter erstellen, die eine Form enthält. Quelle: / client / ajaxrestrecipes / javascript / valuevsreferencetypes.js Funktion CallMeReference (toCall, value) (return function () (toCall (value);)) In den vorhergehenden Code, weist die CallMeReference Funktion zwei Parameter: toCall, das eine Funktion ist, die Wertschöpfung, die der Staat benutzt, um die Funktion toCall Anruf. Die Idee hinter CallMeReference ist eine Funktion, die keine Parameter hat, zu schaffen, sondern wird als mit einigen früheren Zustand definiert. Der folgende Code verwendet werden könnten, um ein Beispiel ausführen: var func = CallMeReference (function (param) (info ( "param ist (" + param + ")");), "Hallo Welt"); func (); In diesem Beispiel wird die Funktion Variable verwendet, um eine gekapselte "Hallo Welt"-Nachricht zu generieren. Die Funktionen Variable kann wiederholt aufgerufen werden, und die gleiche Meldung generiert wird. Die Variable kann zu anderen Variablen und die gleiche Nachricht zugewiesen würde erzeugt werden. Da wir Programmierer sind, werden wir Funktionen, die die Erbauer-Muster folgen und precreate Funktionen mit bestimmten Staaten zu schaffen. Die folgenden beiden Funktionen implementieren die Erbauer-Muster: Funktion Version1Reference () (return CallMeReference (function (param) (info ( "Version 1 ist (" + param + ")");), ➥ "Hallo Welt");) function Version2Reference () (return CallMeReference (function (param ) (info ( "Version 2 ist (" + param + ")");), ➥ "Hallo Welt");) Die Version1Reference und Version2Reference Funktionen generieren Funktionen mit kleinen Unterschieden. Die daraus resultierende generierten Funktionen können Variablen zugewiesen werden und dann wie im vorherigen Beispiel genannt. Bis zu diesem Punkt, alles, was ich gezeigt habe, ist etwas, was Sie tun konnten mit traditionellen Programmiersprachen wie C #, Java und C + +. Hier sind wir jedoch mit Hilfe von JavaScript, die Duck Typing und Prototyp-basierte Funktionen, was bedeutet, dass wenn eine Funktion einer Variablen zugewiesen wird, wissen wir nicht, wie das geschehen Zuordnung implementiert. Diese müssen wissen, wer was gemacht hat Zuordnung keine Rolle spielt, in C + +, C # oder Java, weil die Programmierer die Reihenfolge und Anordnung der Arten vor der Zeit definiert und während der Laufzeit dieser Reihenfolge nicht geändert werden kann. In JavaScript, dass damit nicht vor der Zeit definiert ist es zur Laufzeit definiert. So ist beispielsweise den folgenden Code möglich: if (flag) (func = Version1Reference ();) else (func = Version2Reference ();) Wenn die Funktion zugeordnet wurde, weiß man nicht, ob sie zugewiesen war, mit dem Code aus Version1Reference oder Version2Reference. Wenn die zugewiesenen Code ausgeführt wird, können Sie sich zwangsläufig aus dem Verhalten festzustellen, ob die Version1Reference oder Version2Reference Funktion verwendet wurde. Der Grund, warum ich sagen, dass Sie nicht wissen, welchen Code zugewiesen wurde, liegt daran, dass, wenn Sie die Variable Funktion serialize, wird der folgende Code generiert: function () (toCall (value);) Der generierte Code bedeutet, dass der toCall und Wert-Variablen zugewiesen wurden, aber Sie nicht wissen, was. Dies kann problematisch werden, wenn Sie versuchen, ein Objekt, das auf der generierten Funktion serialize. Wenn Sie die Funktion und versuchen, die Funktion auszuführen serialisieren, wäre ein Fehler generiert werden, da die toCall und Wert-Variablen nicht definiert werden. Sie können den Status der Daten serialisieren Mitglieder, sondern die Methoden Serialisierung Ursachen Staat als lost.For Angenommen, Sie schreiben eine Hypothek Anwendung, und Sie sind derzeit dabei, ein Client. Der Kunde hat ein gewisses Alter, Adresse und Profil. In einer traditionellen Programmierumgebung, würden Sie assoziieren den Staat mit einem Gegenstand jedes Mal den Stand geladen wird. Das heißt, jedes Mal den Stand geladen ist, müssen Sie verschiedene Erbauer-Muster-Implementierungen ausführen, um das entsprechende Objekt Typ zu erstellen. Mit Hilfe von JavaScript ist dies nicht notwendig, weil der Zustand des Objekts, einschließlich der Verfahren, könnte serialisiert werden. Dies macht es möglich, ein komplettes Objekt serialisieren, speichern Sie sie in eine Datenbank ein, oder führen Sie sie in einem anderen Kontext. Dynamische Funktionen müssen Werttypen, was bedeutet, CallMeReference muss geändert werden, wie folgt verwenden: Funktion CallMeValue (toCall, value) (return eval ( "function () (var func =" + ➥ toCall.toString () + "; func ( '" + Value.ToString () + "");) ");) Die CallMeValue Funktion ist wie CallMeReference, außer dass er die Funktion und den Wert in einen String-Puffer, dass verkettet und ausgeführt werden nacheinander. Das Ergebnis der Ausführung ist eine Funktion, wenn serialisiert generiert die folgenden Puffer: function () (var func = (function (param) (info ( "param ist (" + param + ")");}); ➥ func ( "Hallo Welt");) Die serialisierte Funktion verhält sich genauso wie die Funktion in CallMeReference geschaffen, aber der Wert-Funktion kann serialisiert werden und auf einem anderen Computer oder in einem anderen Kontext ausgeführt. Beim Schreiben von Code, der dynamisch Drähte Code, müssen Sie darüber, ob Referenz oder Wert verwenden Programmierung denken Techniken. Beim Schreiben dieser Code die folgenden Faustregeln: • Referenz-Ente-Typen sollten als vorübergehende Arten, die nur für den Umfang der Ausführung von JavaScript (z. B. eine HTML-Seite) leben in Betracht gezogen werden. • Referenz-Ente-Typen werden mit dem Erbauer-Muster. • Einmal erstellt, Referenz-Ente-Typen haben einen leichten Performance-Vorteil, als sie brauchen nicht den Aufwand der Ausführung des eval-Anweisung in der Erbauer-Muster Umsetzung. • Referenz-Ente-Typen können mit mehreren Instanzen Objekt-Instanzen zu teilen, weil Sie zuweisen Referenzen. • Preis-Ente-Typen sollten als langfristige serialisierbar Objekte, bei denen der Staat und Code kann serialisiert werden in Betracht gezogen werden. • Preis-Ente-Typen werden mit dem Erbauer-Muster. • Preis-Ente-Typen sind etwas langsamer als Referenz Ente Typen, weil der Code ist das Ergebnis der Serialisierung, Gebäude einen Puffer, und dann die Puffer. • Preis-Ente-Typen haben nicht die Nebenwirkung von Funktionen mit unregelmäßig, weil der zugewiesenen Objekt-Instanzen zu verhalten. Jeder Aufruf zu einem Wert Ente Typ Erbauer-Muster Ergebnisse in einem sauberen Schiefer-Ansatz, bei dem die Variablen zugeordnet sind, den Staat an die Erbauer-Muster gegeben. 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 "Erläuterungen zu den Abzweigungen der Duck Eingetragen Code" 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: 417 users browsing the articles directory |
|
|