¿Te es difícil entender los mixins?
Si entiendes lo que es un Closure y un Modulo, pues entiendes los Mixins. Gracias a los closures podemos hacer los módulos (simples métodos y propiedades). Los mixins son módulos que aceptan otros módulos como parámetros y de esta manera interactuar con ellos. Un modulo que se recibe a si mismo como parámetro también es un Mixin (esto se hace para extender el mismo modulo agregándole mas propiedades y métodos).
Un modulo:
var Emergencia = (function(){
function socorrer(){
alert("Voy en socorro!!");
console.log("Socorro ejecutado correctamente!!");
}
return {
pedir_ayuda: socorrer
}
})();Esto es un modulo sencillo. Si copias y pegas este código en la consola del navegador, veras que se ejecuta correctamente. Cendras un modulo llamado "Emergencia" con un método "pedir_ayuda()".
Entonces crearemos un Mixin:
var Emergencia = (function(modulo_sirena, modulo_radio, yo){
function comunicar(){
modulo_sirena.encenderLuces("rojas");
modulo_radio.comunicarABase("Emergencia!!");
console.log("Se ha comunicado con exito!!");
}
yo.informar = comunicar;
return yo;
})(Sirena, Radio, Emergencia || {});
Para ejecutar esto necesitaras tener definido los Objetos o Módulos Sirena y Radio que ves que se pasan como parámetro en la ultima linea, en el caso de Emergencia, si existe, el modulo se extenderá con lo que escribas en este mixin, si no existe, Emergencia sera un objeto vació y solo contendrá las propiedades y métodos escritos en este mixin.
En la primera linea recibes los tres parámetros (módulos) pasados en la ultima linea. Como son parámetros le podemos asignar cualquier nombre para referirnos a estos módulos dentro de nuestro mixin.
En la función comunicar nos estamos interactuando desde el modulo Emergencia con los módulos Sirena y Radio.
Esto es un MIXIN!!
Inspirado en la clase de @prigazzi
Pregunta si algo no te ha quedado totalmente claro. Si tienes algo que aportar/agregar, publícalo.
Este aporte fue hecho por:

Recuerda marcar como aporte todo lo que quieras agregar en el sistema de discusión, y como pregunta todas las dudas que tengas.