Allow _.mixin to accept a destination object as well as a source object.

Former-commit-id: 11ccb77653f017270c07579f59d75b847d4e6c65
This commit is contained in:
John-David Dalton
2013-07-18 08:12:14 -07:00
parent 9561414985
commit bb49b0c16a
3 changed files with 42 additions and 14 deletions

View File

@@ -485,6 +485,7 @@
/** Native method shortcuts */
var ceil = Math.ceil,
clearTimeout = context.clearTimeout,
defineProperty = reNative.test(defineProperty = Object.defineProperty) && defineProperty,
floor = Math.floor,
fnToString = Function.prototype.toString,
getPrototypeOf = reNative.test(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,
@@ -5223,20 +5224,26 @@
* _('moe').capitalize();
* // => 'Moe'
*/
function mixin(object) {
forEach(functions(object), function(methodName) {
var func = lodash[methodName] = object[methodName];
function mixin(object, source) {
if (!source) {
source = object;
object = lodash;
}
var isFunc = isFunction(object);
forEach(functions(source), function(methodName) {
var func = object[methodName] = source[methodName];
if (isFunc) {
object.prototype[methodName] = function() {
var value = this.__wrapped__,
args = [value];
lodash.prototype[methodName] = function() {
var value = this.__wrapped__,
args = [value];
push.apply(args, arguments);
var result = func.apply(lodash, args);
return (value && typeof value == 'object' && value === result)
? this
: new lodashWrapper(result);
};
push.apply(args, arguments);
var result = func.apply(object, args);
return (value && typeof value == 'object' && value === result)
? this
: new lodashWrapper(result);
};
}
});
}