Function.prototype.bind replacement that provides an unbounded
hidden property on the returned bounded function, that contains the original unbounded function
This package functions like Function.prototype.bind
, however it exposes a hidden unbounded
property on the returned bounded function that contains the original unbounded function.
This is very useful as it means you can do:
(fn.unbounded || fn).length
to always get the correct amount of arguments(fn.unbounded || fn).toString()
to always get the source code of any function instead of gettingfunction () { [native code] }
for bounded functionsfn.bind(firstContext).unbounded.bind(secondContext)
to havefn
actually bind to the second context, asfn.bind(firstContext).bind(secondContext)
only binds to the first context
To have all bounded functions have the unbounded
property, use patch
:
import { patch } from 'unbounded'
patch()
const context = { hello: 'world' }
function myFunction() {
return this.hello
}
import { equal } from 'assert'
const boundedFunction = myFunction.bind(context)
equal(boundedFunction(), context.hello, 'context was correct')
equal(boundedFunction.unbounded, myFunction, 'unbounded was correct')
To have only specific functions have the unbounded
property, use binder
:
import { equal } from 'assert'
import { binder } from 'unbounded'
const context = { hello: 'world' }
function myFunction() {
return this.hello
}
import { equal } from 'assert'
const boundedFunction = binder.call(myFunction, context)
equal(boundedFunction(), context.hello, 'context was correct')
equal(boundedFunction.unbounded, myFunction, 'unbounded was correct')
- Install:
npm install --save unbounded
- Import:
import * as pkg from ('unbounded')
- Require:
const pkg = require('unbounded')
import * as pkg from 'https://unpkg.com/unbounded@^6.3.1/edition-deno/index.ts'
<script type="module">
import * as pkg from '//cdn.skypack.dev/unbounded@^6.3.1'
</script>
<script type="module">
import * as pkg from '//unpkg.com/unbounded@^6.3.1'
</script>
<script type="module">
import * as pkg from '//dev.jspm.io/unbounded@6.3.1'
</script>
This package is published with the following editions:
unbounded
aliasesunbounded/index.cjs
which uses the Editions Autoloader to automatically select the correct edition for the consumer's environmentunbounded/source/index.ts
is TypeScript source code with Import for modulesunbounded/edition-browsers/index.js
is TypeScript compiled against ES2022 for web browsers with Import for modulesunbounded/edition-es2022/index.js
is TypeScript compiled against ES2022 for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modulesunbounded/edition-es5/index.js
is TypeScript compiled against ES5 for Node.js 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modulesunbounded/edition-es2022-esm/index.js
is TypeScript compiled against ES2022 for Node.js 12 || 14 || 16 || 18 || 20 || 21 with Import for modulesunbounded/edition-types/index.d.ts
is TypeScript compiled Types with Import for modulesunbounded/edition-deno/index.ts
is TypeScript source code made to be compatible with Deno
Discover the release history by heading on over to the HISTORY.md
file.
Discover how to contribute via the CONTRIBUTING.md
file.
- Benjamin Lupton — Accelerating collaborative wisdom.
- Benjamin Lupton — Accelerating collaborative wisdom.
- Andrew Nesbitt — Software engineer and researcher
- Balsa — We're Balsa, and we're building tools for builders.
- Codecov — Empower developers with tools to improve code quality and testing.
- Poonacha Medappa
- Rob Morris
- Sentry — Real-time crash reporting for your web apps, mobile apps, and games.
- Syntax — Syntax Podcast
- Andrew Nesbitt
- Armen Mkrtchian
- Balsa
- Chad
- Codecov
- dr.dimitru
- Elliott Ditman
- entroniq
- GitHub
- Hunter Beast
- Jean-Luc Geering
- Michael Duane Mooring
- Michael Harry Scepaniak
- Mohammed Shah
- Mr. Henry
- Nermal
- Pleo
- Poonacha Medappa
- Rob Morris
- Robert de Forest
- Sentry
- ServieJS
- Skunk Team
- Syntax
- WriterJohnBuck
Unless stated otherwise all works are:
- Copyright © Benjamin Lupton
and licensed under: