Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
32 lines (31 sloc)
922 Bytes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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. | |
* | |
* @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) { | |
let result | |
if (typeof func !== 'function') { | |
throw new TypeError('Expected a function') | |
} | |
return function(...args) { | |
if (--n > 0) { | |
result = func.apply(this, args) | |
} | |
if (n <= 1) { | |
func = undefined | |
} | |
return result | |
} | |
} | |
export default before |