Skip to content
This repository has been archived by the owner on Nov 24, 2022. It is now read-only.

Kikobeats/fn-partial

Repository files navigation

fn-partial

Build Status Dependency status Dev Dependencies Status NPM Status Gittip

Feel like a memory pointer. Pass a reference to a function.

Javascript is a very dynamic language, but sometimes you need to be more dynamic.

If you need to use something as memory pointers in C isn't possible in JavaScript, but you can do an alternative: a function that calculate the result dynamically.

For example, imagine that you have a collection of players

var players = {
  one: 'Kiko',
  two: 'Ricard',
  three: 'Xavi'
};

and you have a function that return the number of players in the collection:

function size(objt) {
  return Object.keys(objt).length
}

Now, you want to know the numbers of players, and you need to have 4 players for start a new game.

If you do something like this:

var numPlayers = size(players)
console.log(numPlayers) // => 3
players.four = 'Ben'
console.log(numPlayers) // => 3, expected 4 :(

It's fail because the value is assigned when you call the function.

In languages as C you can create a pointer in the same memory direction and know the value in any time because the pointer referenced the value.

With this package you can simulate something like that.

var partial = require('fn-partial')
var numPlayers = partial(size, players)
console.log(numPlayers()) // => 3
players.four = 'Ben'
console.log(numPlayers()) // => 4 YEAH!

More information and the history of this code in StackOverflow

Extra

Using Bind

var numPlayers = size.bind(null, players)

Using defineProperty

Object.defineProperty(players, 'size', {
  get: function () { return Object.keys(this).length }
})

Install

npm install fn-partial --save

If you want to use in the browser (powered by Browserify):

bower install fn-partial --save

and later link in your HTML:

<script src="bower_components/fn-partial/dist/fn-partial.js"></script>

Usage

var partial = require('fn-partial')

// Call a function without arguments
var result = partial(sayHello())
result()
// => console.log('Hello World')

// Call a function with arguments
var result = partial(sayHello, 'Kiko', ', how are you?')
result();
// => console.log('Hello World, Kiko!, how are you?')

License

MIT © Kiko Beats

About

Feel like a memory pointer. Pass a reference to a function.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published