uncurry-x
v1.0.1
Published
Standard uncurryThis utility for method-to-function transformation with full legacy environment support.
Downloads
164
Maintainers
Readme
uncurry-x
Creates an uncurried version of a function that takes this as the first argument.
Installation
npm install uncurry-xUsage
var uncurryThis = require("uncurry-x")
function greet(name) {
return this.greeting + ", " + name + "!"
}
var greetUnbound = uncurryThis(greet)
var context = { greeting: "Hello" }
greetUnbound(context, "World") // "Hello, World!"
// Works even after Function.prototype methods are deleted
delete Function.prototype.call
delete Function.prototype.bind
greetUnbound(context, "World") // still works!API
uncurryThis(fn)
Takes a function and returns an uncurried version where this becomes the first parameter.
Parameters:
fn(Function): The function to uncurry
Returns:
- (Function): The uncurried function with
lengthset tooriginalLength + 1
.apply helper
The returned function has an .apply method that works like Function.prototype.apply:
var slice = uncurryThis(Array.prototype.slice)
// Using .apply
slice.apply(null, [[10, 20, 30, 40], 1, 3]) // [20, 30]
// Equivalent to:
slice([10, 20, 30, 40], 1, 3) // [20, 30]Examples
Array methods
var map = uncurryThis(Array.prototype.map)
var join = uncurryThis(Array.prototype.join)
var numbers = [1, 2, 3]
var doubled = map(numbers, function (x) {
return x * 2
}) // [2, 4, 6]
join(doubled, "-") // "2-4-6"String methods
var split = uncurryThis(String.prototype.split)
var toLowerCase = uncurryThis(String.prototype.toLowerCase)
split("foo-bar-baz", "-") // ["foo", "bar", "baz"]
toLowerCase("HELLO") // "hello"Custom methods
function Counter(start) {
this.count = start
}
Counter.prototype.increment = function (amount) {
this.count += amount
return this.count
}
var increment = uncurryThis(Counter.prototype.increment)
var counter = new Counter(10)
increment(counter, 5) // 15Features
- ES3 compatible
- Preserves function
lengthproperty correctly - Works even after
Function.prototype.callandFunction.prototype.bindare deleted - Includes
.applyhelper method - Uses cached references to native methods for maximum reliability
License
MIT
