¿Podría alguien darme un ejemplo de Duck Typing inheritance en Javascript? Estoy explorando OO javascript y he escuchado sobre el pato de tipeo, pero no veo ejemplos de su uso en javascript.Duck Typing en Javascript
Respuesta
El segundo enlace muestra un ejemplo de un patrón tipo pato en js. No digo que recomiendo hacer esto, pero ... bueno, lo pediste. ;)
En la programación de ordenador con lenguajes de programación orientados a objetos, duck typing es un estilo de dinámica escribir en el cual la corriente conjunto de métodos y propiedades de un objeto determina la semántica válidos, en lugar que su herencia de una clase particular o implementación de una interfaz específica .
El método más sencillo es definir el contrato manera informal y simplemente se basan en los desarrolladores en cada lado de la interfaz saber lo que están haciendo. Dave Thomas le ha dado a este enfoque el nombre de "pato escribiendo" -si anda como un pato y grazna como un pato, , entonces es un pato. De manera similar con nuestra interfaz
Shape
, si se puede calcular un área y un perímetro, entonces es unShape
.
Brillante, gracias por las respuestas. Ahora comprendo, creo que voy a mantener mi herencia estándar usando la cadena de prototipos. –
¡El ejemplo js en wikipedia no verifica "paseos" y "charlatanes"! ¿No debería ese ejemplo ser actualizado? – eminemence
La regla de "Duck Typing" es
Si se ve como un pato, nada como un pato, y grazna como un pato, entonces probablemente es un pato.
En un lenguaje basado en clases programación orientada a objetos (C++, por ejemplo) para que ambos objetos se ven como un pato debe heredar sus clases de una clase de "interfaz" común, por lo que el compilador le permiten hablar duck
métodos en ellos. Eso se llama tipeo fuerte.
Ahora bien, esto es cómo se hace 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
Sede, la función check
comprobar si el objeto pasado parece un pato (comprueba apariencia y su capacidad de charlatán). Le pasamos dos objetos diferentes y devolverá true
en ambos. Además de la apariencia y el graznar, estas cosas pueden ser completamente diferentes, pero EN ESTA PARTICULAR función check
se comportan de la misma manera (tienen una interfaz común), ambas parecen un "pato". Podemos llamar al método quack
en ambos objetos (y a quién le importa lo que realmente son).
Un ejemplo para pato escribir en JavaScript es iterables. JavaScript no tiene ningún tipo llamado Iterable
, pero tiene una definición para un objeto, que es iterable.
Con el fin de ser iterable, un objeto debe implementar la @@ método iterador
Este es el requisito para la tipificación de pato. Si un objeto implementa un método, definido en una interfaz, el objeto se puede usar en lugares, donde se acepta el tipo de interfaz. Para iterables este es el caso en los bucles
for (let value of iterable) {
}
y matrices
[...iterable]
- 1. Eclipse (Aptana) Typing Lag
- 2. Touch Typing Software recomendaciones
- 3. Touch typing en Visual Studio 2008
- 4. ¿Debo definir las interfaces en los lenguajes Duck Typed?
- 5. Scala Typing: cómo asegurar el tipo numérico
- 6. métodos mínimos de pedidos con Typing pato en Python 3.1
- 7. C# Stop Person From Typing In Option En cuadro desplegable
- 8. ¿Qué es "Typing estructural para interfaces" a máquina de escribir
- 9. if instrucción en javascript siempre verdadero
- 10. Analizador de JavaScript en JavaScript
- 11. ¿Cómo puedo lanzar una clase de Java en Clojure?
- 12. tipificación de pato y el concepto
- 13. () [] +! en javascript
- 14. Inyectar javascript en una función de Javascript
- 15. archivo JavaScript importación en función de JavaScript
- 16. compilador Kotlin a JavaScript en JavaScript?
- 17. Javascript: Procesar cuando el usuario ha dejado de escribir
- 18. Cómo pasar por el código en el depurador de JavaScript de Google Chrome
- 19. JavaScript archivo en byte []
- 20. python's hasattr en javascript?
- 21. caracteres internacionales en Javascript
- 22. sleep() en Javascript
- 23. macro definición en javascript
- 24. __LINE__ equivalente en Javascript
- 25. interpolación en JavaScript
- 26. enteros en JavaScript
- 27. literales XML en JavaScript?
- 28. Mónadas en JavaScript?
- 29. window.onerror en Safari (Javascript)
- 30. tabla hash en JavaScript
pato a escribir no funciona tan bien en Javascript- el objeto podría graznar como un número de coma flotante, pero puede ser tan probablemente graznar como una cuerda o un booleano. – kennebec
http://stackoverflow.com/a/12763070/822138 tiene algunos buenos ejemplos y discusión. – sam