Mixins em JavaScript – uma maneira simples

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