Es la manera en la cual nosotros heredamos en un objeto las propiedades y métodos de uno, o más prototipos.

function mixin() {
  var property;
  var newPrototype = {};
  var argsArr = Array.prototype.slice.call(arguments);
  var baseObject = argsArr[0];
  var prototypes = argsArr.slice(1);

  prototypes.forEach(function(item) {
    for (property in item) {
      if (item.hasOwnProperty(property)) {
        newPrototype[property] = item[property];
      }
    }
  });

  baseObject.prototype = newPrototype;
  baseObject.prototype.constructor = baseObject;
}

function Shape() {}
Shape.prototype.getArea = function() {
  return this.sides[0] * this.sides[1];
}

function Style() {}
Style.prototype.fill = function() {
  return 'This ' + this.constructor.name + ' is ' + this.color;
}

function Rectangle(width, height, color) {
  this.sides = [width, height, width, height];
  this.color = color;
}

mixin(Rectangle, Shape.prototype, Style.prototype);

var myRectangle = new Rectangle(5, 7, 'Blue');

console.log(myRectangle.getArea()); // 35
console.log(myRectangle.fill()); // This Rectangle is Blue