Como em meu protocolo anterior , vou apresentar a função auxiliar ‘ex’ primeiro:
function ex (destination, source) {
var p;
for (p in source) {
if (source.hasOwnProperty(p)) {
destination[p] = source[p];
}
}
return destination;
}
Nada de especial, apenas copia as propriedades da fonte no destino.
E aqui está a nossa função mixin:
function mixin () {
var i, ln = arguments.length;
for (i = 0; i < ln; i++) {
ex(this.prototype, arguments[i]);
}
};
Novamente, nada de especial – leva mais de 0 objetos mixin e usando a função auxiliar ‘ex’ adiciona suas propriedades ao objeto de contexto atual.
Aqui está um exemplo:
function Foo (a, b) {
this.a = a;
this.b = b;
}
Foo.include = mixin;
Foo.prototype = {
constructor: Foo,
c: function () {
return this.a + this.b;
}
};
Esta é a nossa classe foo, ela pode lidar com mixins (veja como atribuÃmos a função ‘mixin’ para ser seu método ‘incluir’).
E vamos misturar alguns objetos em Foo:
Foo.include({
d: 5,
e: function () {
return this.d * this.d;
}
});
Aqui vamos nós:
var foo = new Foo(1, 2);
console.log(foo.c()); // 3
console.log(foo.e()); // 25
console.log(foo.constructor.prototype);
Experimente aqui