| var toInteger = require('./toInteger'); |
| |
| /** Error message constants. */ |
| var FUNC_ERROR_TEXT = 'Expected a function'; |
| |
| /** |
| * Creates a function that invokes `func`, with the `this` binding and arguments |
| * of the created function, while it's called less than `n` times. Subsequent |
| * calls to the created function return the result of the last `func` invocation. |
| * |
| * @static |
| * @memberOf _ |
| * @since 3.0.0 |
| * @category Function |
| * @param {number} n The number of calls at which `func` is no longer invoked. |
| * @param {Function} func The function to restrict. |
| * @returns {Function} Returns the new restricted function. |
| * @example |
| * |
| * jQuery(element).on('click', _.before(5, addContactToList)); |
| * // => Allows adding up to 4 contacts to the list. |
| */ |
| function before(n, func) { |
| var result; |
| if (typeof func != 'function') { |
| throw new TypeError(FUNC_ERROR_TEXT); |
| } |
| n = toInteger(n); |
| return function() { |
| if (--n > 0) { |
| result = func.apply(this, arguments); |
| } |
| if (n <= 1) { |
| func = undefined; |
| } |
| return result; |
| }; |
| } |
| |
| module.exports = before; |