Quelqu'un pourrait-il me donner un exemple de l'héritage de Duck Typing en Javascript? J'explore OO javascript et j'ai entendu parler de la dactylographie, mais je ne vois pas d'exemples de ce qui est utilisé en javascript.Canard taper en Javascript
Répondre
Le deuxième lien donne un exemple de canevas de type canard dans js. Je ne dis pas que je recommande de faire ça, mais ... eh bien, vous l'avez demandé. ;)
En programmation avec des langages de programmation orientés objet , frappe de canard est un style de dynamique frappe dans lequel ensemble actuel d'un objet des méthodes et des propriétés détermine la sémantique valide plutôt que son héritage d'une classe particulière ou implémentation d'une interface spécifique .
L'approche la plus simple est de définir le contrat officieusement et simplement se fier les développeurs de chaque côté de l'interface de savoir ce qu'ils font. Dave Thomas a donné cette approche le nom de "dactylographie" -si il marche comme un canard et il fait des charlatans comme un canard, alors c'est un canard. De même, avec notre interface
Shape
, si elle peut calculer une zone et un périmètre, alors il s'agit d'unShape
.
Brillant, merci pour les réponses. Maintenant que je comprends, je pense que je vais m'en tenir à mon héritage standard en utilisant la chaîne du prototype. –
L'exemple js dans wikipedia, ne vérifie pas les "marches" et "charlatans" !! Cet exemple ne devrait-il pas être mis à jour? – eminemence
La règle de « Duck Typing » est
Si elle ressemble à un canard, nage comme un canard et caquette comme un canard, alors il est probablement un canard.
Dans un langage de programmation orienté objet basé sur la classe (C++, par exemple) pour faire les deux objets ressemblent à un canard vous devez hériter de leurs cours d'une classe « d'interface » commune, de sorte que le compilateur vous laisser appeler duck
méthodes sur eux. C'est ce qu'on appelle un typage fort.
Maintenant, c'est comment faire en Javascript:
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
Voir, la fonction check
vérifier si l'objet passé ressemble à un canard (il vérifie l'apparence et sa capacité de charlatan). Nous lui passons deux objets différents et il renverra true
sur les deux. Outre l'apparence et le charlatanage, ces choses peuvent être complètement différentes, mais dans cette fonction particulière elles se comportent de la même façon (ont une interface commune), elles ressemblent toutes deux à un "canard". Nous pouvons appeler la méthode quack
sur les deux objets (et qui se soucie de ce qu'ils sont vraiment).
Un exemple de typage de canard en JavaScript est iterables. JavaScript n'a en réalité aucun type appelé Iterable
, mais il a une définition pour un objet, qui est itérable.
Pour être itératives, un objet doit implémenter la méthode @@ iterator
Ceci est l'exigence de frappe de canard. Si un objet implémente une méthode, définie dans une interface, l'objet peut être utilisé dans des endroits où le type d'interface est accepté. Pour iterables cela est le cas dans les boucles
for (let value of iterable) {
}
et tableaux
[...iterable]
- 1. Héritage multiple et saisie de canard
- 2. Bibliothèque de dactylographie en canard C# la plus à jour
- 3. Comment taper fortement les propriétés en JavaScript qui correspondent aux modèles en C#?
- 4. Javascript: Traitement lorsque l'utilisateur a cessé de taper
- 5. Taper en utilisant des combinaisons de touches?
- 6. Mono.Cecil TypeRéférence à taper?
- 7. cancel taper sur formulaire
- 8. Double-Taper dans UIButton
- 9. comment taper correctement ajax?
- 10. Où taper @Override?
- 11. postback sur cliquez pour taper en avant menu déroulant
- 12. Comment taper une infinité de virgule flottante littérale en python
- 13. Taper comme "T" générique en utilisant la réflexion
- 14. script pour taper et copier des répertoires
- 15. Taper sur la sortie VGA d'un PC
- 16. Impossible de taper à l'intérieur d'un WebView
- 17. Asp.Net - Peut-on taper un LinkButton.CommandArgument?
- 18. Comment taper jeter un littéral dans C
- 19. Taper le caractère tilde ~ dans DOS
- 20. Comment puis-je taper un tableau?
- 21. Forcer l'utilisateur à taper seulement les nombres
- 22. taper 'rails console' ne démarre pas?
- 23. xsi: taper au format littéral doc
- 24. Aperçu SVG en utilisant Javascript?
- 25. Pourquoi est-il nécessaire de taper un pointeur?
- 26. empêche l'utilisateur de taper des caractères non-anglais
- 27. Impossible de taper la saisie de texte dans IE
- 28. Apprendre Java, comment taper du texte sur du canevas?
- 29. C++ taper la confusion avec les opérateurs << et []
- 30. Comment empêcher les utilisateurs de taper des entrées incorrectes?
frappe de canard ne fonctionne pas si bien dans javascript- votre objet pourrait charlatan comme un nombre à virgule flottante, mais il peut être tout aussi susceptible de coincer comme une ficelle ou un booléen. – kennebec
http://stackoverflow.com/a/12763070/822138 a quelques bons exemples et discussion. – sam