sweetener
v1.0.2
Published
Add getters and setters to a function to connect it with an object
Downloads
10
Readme
Sweetener
Inspired by Mike Bostock's Towards Reusable Charts, this function makes it easy to add "syntactic sugar" for getting and setting properties on a function.
Installation
On npm:
npm install sweetener
Sweetener can be run in a browser by including sweetener.js
. It is available as a global (sweetener
) or via AMD.
Usage
Start with the function you wish to augment, and an object whose properties you wish to use:
var sweetener = require('sweetener') // For node.js
function fn () {}
var object = { hello: 'world', foo: 'bar' }
Then call sweetener
with the function and the object:
sweetener(fn, object)
The object properties can now be accessed by called methods on the function that match the object key:
fn.foo() // 'bar'
And they can be set by calling the method with a value:
fn.foo('baz')
fn.foo() // 'baz'
Setters return the function itself and so can be chained:
fn.hello('hello').foo('baz')
Why?
In Towards Reusable Charts, Mike Bostock advocates using nested functions like so:
function constructor () {
var width = 3
var height = 2
function chart () {
console.log(width, height)
// …
}
chart.width = function (_) {
if (!arguments.length) return width
width = _
return chart
}
chart.height = function (_) {
if (!arguments.length) return height
height = _
return chart
}
return chart
}
var chart = constructor()
chart() // render chart with a width: 3 and height: 2
chart.width(4).height(3)
chart() // render chart with a width: 4 and height: 3
Writing getters and setters for each variable can get cumbersome, so sweetener
can do the work for you:
function constructor () {
var props = {
width: 3,
height: 2
}
return sweetener(function chart () {
console.log(props.width, props.height)
// …
}, props)
}
var chart = constructor()
chart() // render chart with a width: 3 and height: 2
chart.width(4).height(3)
chart() // render chart with a width: 4 and height: 3
License
Sweetener is copyright © 2016+ Dom Christie and released under the MIT license.