Könnte mir jemand ein Beispiel für Duck Typing Vererbung in Javascript geben? Ich erkunde OO Javascript und ich habe über Ente Typisierung gehört, aber kann keine Beispiele dafür in Javascript verwendet werden.Duck Typing in Javascript
Antwort
Der zweite Link gibt ein Beispiel für ein Duck-typing-ähnliches Muster in js. Nicht zu sagen, ich empfehle das, aber ... nun, du hast darum gebeten. ;)
In Computer-Programmierung mit objektorientierten Programmiersprachen, ist Duck Typing eine Art von dynamischer Typisierung, in dem ein Strom Reihe von Methoden und Eigenschaften des Objekts die gültige Semantik bestimmt, sondern als seine Vererbung von einer bestimmten Klasse oder Implementierung einer spezifischen Schnittstelle.
Der einfachste Ansatz ist es, den Vertrag formlos und einfach auf die Entwickler an jeder Seite der Schnittstelle verlassen, um zu definieren, zu wissen, was sie tun. Dave Thomas hat diesen Ansatz den Namen "Ente Typisierung" -wenn es geht wie eine Ente und quakt wie eine Ente, dann ist es eine Ente gegeben. Ähnlich wie bei unserer Schnittstelle
Shape
, wenn es einen Bereich und einen Umfang berechnen kann, dann ist es einShape
.
Brilliant, danke für die Antworten. Jetzt verstehe ich, dass ich bei meiner Standardvererbung bleiben werde, indem ich die Prototypkette benutze. –
Das js Beispiel in Wikipedia, prüft nicht für irgendwelche "Wege" und "Quacksalber" !! Sollte dieses Beispiel nicht aktualisiert werden? – eminemence
Die Regel der „Duck Typing“ ist
Wenn es aussieht wie eine Ente, schwimmt wie eine Ente und quakt wie eine Ente, dann ist es wahrscheinlich eine Ente.
In einer klassenbasierten objektorientierten Programmiersprache (C++, zum Beispiel) beiden Objekte wie eine Ente aussehen lassen Sie ihre Klassen von einer gemeinsamen „Schnittstelle“ Klasse erben müssen, so würden die Compiler können Sie anrufen duck
Methoden auf ihnen. Das nennt man eine starke Typisierung.
Nun ist dies, wie es in Javascript getan:
var duck = {
appearance: "feathers",
quack: function duck_quack(what) {
print(what + " quack-quack!");
},
color: "black"
};
var someAnimal = {
appearance: "feathers",
quack: function animal_quack(what) {
print(what + " whoof-whoof!");
},
eyes: "yellow"
};
function check(who) {
if ((who.appearance == "feathers") && (typeof who.quack == "function")) {
who.quack("I look like a duck!\n");
return true;
}
return false;
}
check(duck); // true
check(someAnimal); // true
See, die check
Funktion überprüfen, ob das übergebene Objekt aussieht wie eine Ente (er prüft Aussehen und seine Fähigkeit zu quaken). Wir übergeben zwei verschiedene Objekte und es wird true
auf beiden zurückgeben. Neben dem Aussehen und dem Quaken können das völlig verschiedene Dinge sein, aber in dieser speziellen Funktion verhalten sie sich genauso (haben eine gemeinsame Schnittstelle), sie sehen beide wie eine "Ente" aus. Wir können die Methode quack
für beide Objekte aufrufen (und wen kümmert es, was sie wirklich sind).
Ein Beispiel für die Eingabe von Enten in JavaScript sind iterables. JavaScript hat eigentlich keinen Typ namens Iterable
, aber es hat eine Definition für ein Objekt, das iterierbar ist.
Um iterable zu sein, ein Objekt muss die @@ Iteratormethode
Dies ist die Voraussetzung für die Ente Typisierung implementieren. Wenn ein Objekt eine in einer Schnittstelle definierte Methode implementiert, kann das Objekt an Stellen verwendet werden, an denen der Schnittstellentyp akzeptiert wird. Für Iterables ist dies der Fall in Schleifen
for (let value of iterable) {
}
und Arrays
[...iterable]
- 1. Duck Typing und Fremdkörper
- 2. Duck-Typing implizite Konvertierung in Scala
- 3. TypeScript Duck Typing, starke statische Eingabe wünschen
- 4. C++ - Vorlage Duck-Typing vs. reine virtuelle Basisklassenvererbung
- 5. Mindest Methoden für die Bestellung mit Duck Typing in Python 3.1
- 6. Django: Duck Typing freundlich Aufzeichnung oder Slug der Aufzeichnung für die Eingabe der Annahme
- 7. Implementierung sichere duck-Typisierung in C#
- 8. Typing in Typoskript
- 9. Struktur Typing für Travers
- 10. Touch Typing Software Empfehlungen
- 11. Wie arbeite ich mit Ruby Duck?
- 12. Strong Typing ein Eigenschaftsname in .NET
- 13. Was „Structural Typing für Schnittstellen“ in Typoskript
- 14. Typescript-String-Literal mit duck-typed-Objekt
- 15. Applied duck-Typisierung im Klar C
- 16. Visual Basic Typing und Casting Frage
- 17. Install Typing-Pakete hinter Corporate Proxy
- 18. Wie nutze ich Typing-Client-Seite effektiv?
- 19. Wie duck eine Methode in F # mit mehreren Argumenten eingeben?
- 20. Animierte Eingabe in nativem JavaScript
- 21. Warum C++ 1 * noch das Vorlagenschlüsselwort anstelle der vollständigen Duck-Eingabe benötigt
- 22. Typing über Spannweite fügt Phantom background-color Stil
- 23. wie tipp collections.OrderedDict über python eingeben 3.5 typing modul
- 24. CSS-Klassen als Variable in Javascript für die spätere Verwendung festlegen?
- 25. Wie kann ich die CSS-Animation "Typing-Effekt" in Verbindung mit der Reaktionsfähigkeit von Bootstrap verwenden?
- 26. Gibt es eine Möglichkeit, das MS Office Smooth Typing in eine C# -Anwendung zu integrieren?
- 27. Wo ist die Autocomplete-Option "Committed by the typing the character" in VS2015?
- 28. Unterstützt Ruby Einschlusspolymorphismus
- 29. JavaScript wird erweitert?
- 30. Ist diese Ente in Python tippen?
Duck Typing nicht so gut in Javascript- Ihr Objekt funktioniert wie eine Gleitkommazahl quaken könnte, aber es kann nur sein, wie wahrscheinlich quatschen wie eine Schnur oder ein Boolean. – kennebec
http://StackOverflow.com/a/12763070/822138 hat einige gute Beispiele und Diskussionen. – sam