lib/mixin.js
function(reopen, name) {
  return function() {
    // the `reopen` function that was passed in to this function will continue
    // the process of reopening to the function that this is monkey-patching.
    // it is not a recursive call.

    // the `recursiveReopen` function, on the other hand, is the reopen
    // function that's actually defined on the class object and will allow us
    // to restart the reopen process from the beginning for each individual
    // mixin that we find.
    var recursiveReopen = Class.__metaclass__.prototype[name];
    var args = _.toArray(arguments);

    var properties = args.shift();
    if (properties instanceof Mixin.__class__) {
      properties.__flatten__().forEach(function(mixin) {
        recursiveReopen.call(this, mixin);
      }, this);
      properties = {};
    }
    args.unshift(properties);

    return reopen.apply(this, args);
  };
}
function(reopen, name) {
  return function() {
    // the `reopen` function that was passed in to this function will continue
    // the process of reopening to the function that this is monkey-patching.
    // it is not a recursive call.

    // the `recursiveReopen` function, on the other hand, is the reopen
    // function that's actually defined on the class object and will allow us
    // to restart the reopen process from the beginning for each individual
    // mixin that we find.
    var recursiveReopen = Class.__metaclass__.prototype[name];
    var args = _.toArray(arguments);

    var properties = args.shift();
    if (properties instanceof Mixin.__class__) {
      properties.__flatten__().forEach(function(mixin) {
        recursiveReopen.call(this, mixin);
      }, this);
      properties = {};
    }
    args.unshift(properties);

    return reopen.apply(this, args);
  };
}
function ( reopen , name ) { return function ( ) { // the `reopen` function that was passed in to this function will continue // the process of reopening to the function that this is monkey-patching. // it is not a recursive call. // the `recursiveReopen` function, on the other hand, is the reopen // function that's actually defined on the class object and will allow us // to restart the reopen process from the beginning for each individual // mixin that we find. var recursiveReopen = Class . __metaclass__ . prototype [ name ] ; var args = _ . toArray ( arguments ) ; var properties = args . shift ( ) ; if ( properties instanceof Mixin . __class__ ) { properties . __flatten__ ( ) . forEach ( function ( mixin ) { recursiveReopen . call ( this , mixin ) ; } , this ) ; properties = { } ; } args . unshift ( properties ) ; return reopen . apply ( this , args ) ; } ; }
Shared function for supporting mixins via `reopen` and `reopenClass`.

@memberof Mixin~ClassPatching
@type function
@private
Shared function for supporting mixins via reopen and reopenClass .