diff --git a/lodash.js b/lodash.js index c4d7a6825..8468d5c7e 100644 --- a/lodash.js +++ b/lodash.js @@ -1034,6 +1034,7 @@ // ensure `new bound` is an instance of `func` var thisBinding = baseCreate(func.prototype), result = func.apply(thisBinding, args || arguments); + return isObject(result) ? result : thisBinding; } return func.apply(thisArg, args || arguments); @@ -2385,11 +2386,11 @@ * // => ['barney', 'fred'] */ function first(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; - if (typeof callback != 'number' && callback != null) { - var index = -1; + var index = -1, + length = array ? array.length : 0, + n = 0; + callback = lodash.createCallback(callback, thisArg, 3); while (++index < length && callback(array[index], index, array)) { n++; @@ -2558,17 +2559,18 @@ * // => ['barney', 'fred'] */ function initial(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; + var length = array ? array.length : 0; if (typeof callback != 'number' && callback != null) { - var index = length; + var index = length, + n = 0; + callback = lodash.createCallback(callback, thisArg, 3); while (index-- && callback(array[index], index, array)) { n++; } } else { - n = (callback == null || thisArg) ? 1 : callback || n; + n = (callback == null || thisArg) ? 1 : callback; } n = length - n; return slice(array, 0, n > 0 ? n : 0); @@ -2683,11 +2685,12 @@ * // => [{ 'name': 'pebbles', 'employer': 'na', 'blocked': true }] */ function last(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; + var length = array ? array.length : 0; if (typeof callback != 'number' && callback != null) { - var index = length; + var index = length, + n = 0; + callback = lodash.createCallback(callback, thisArg, 3); while (index-- && callback(array[index], index, array)) { n++; @@ -2937,9 +2940,9 @@ */ function rest(array, callback, thisArg) { if (typeof callback != 'number' && callback != null) { - var n = 0, - index = -1, - length = array ? array.length : 0; + var index = -1, + length = array ? array.length : 0, + n = 0; callback = lodash.createCallback(callback, thisArg, 3); while (++index < length && callback(array[index], index, array)) {