| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | var arrayEach = require('./_arrayEach'),    arrayPush = require('./_arrayPush'),    baseFunctions = require('./_baseFunctions'),    copyArray = require('./_copyArray'),    isFunction = require('./isFunction'),    isObject = require('./isObject'),    keys = require('./keys');/** * Adds all own enumerable string keyed function properties of a source * object to the destination object. If `object` is a function, then methods * are added to its prototype as well. * * **Note:** Use `_.runInContext` to create a pristine `lodash` function to * avoid conflicts caused by modifying the original. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {Function|Object} [object=lodash] The destination object. * @param {Object} source The object of functions to add. * @param {Object} [options={}] The options object. * @param {boolean} [options.chain=true] Specify whether mixins are chainable. * @returns {Function|Object} Returns `object`. * @example * * function vowels(string) { *   return _.filter(string, function(v) { *     return /[aeiou]/i.test(v); *   }); * } * * _.mixin({ 'vowels': vowels }); * _.vowels('fred'); * // => ['e'] * * _('fred').vowels().value(); * // => ['e'] * * _.mixin({ 'vowels': vowels }, { 'chain': false }); * _('fred').vowels(); * // => ['e'] */function mixin(object, source, options) {  var props = keys(source),      methodNames = baseFunctions(source, props);  var chain = !(isObject(options) && 'chain' in options) || !!options.chain,      isFunc = isFunction(object);  arrayEach(methodNames, function(methodName) {    var func = source[methodName];    object[methodName] = func;    if (isFunc) {      object.prototype[methodName] = function() {        var chainAll = this.__chain__;        if (chain || chainAll) {          var result = object(this.__wrapped__),              actions = result.__actions__ = copyArray(this.__actions__);          actions.push({ 'func': func, 'args': arguments, 'thisArg': object });          result.__chain__ = chainAll;          return result;        }        return func.apply(object, arrayPush([this.value()], arguments));      };    }  });  return object;}module.exports = mixin;
 |