multimix
v6.0.0
Published
Objects with auto-generated property chains
Downloads
105
Maintainers
Readme
MultiMix
Table of Contents generated with DocToc
MultiMix
Objects with auto-generated property chains
class
Hedge
- purpose: enable turning property access to function calls
propoerties may be predefined
or auto-generated, either
- as plain objects
- or by calling a custom factory function
example:
handler = ( hedges, a, b, c ) -> log hedges, [ a, b, c, ] return null h = new Hedge { handler, } h.foo # [ 'foo', ]
- purpose: enable turning property access to function calls
since hubs and properties are proxies, can do things on property access, no call needed, so both
d.foo
andd.foo 42
can potentially do thingscfg
:cfg.handler
: mandatory property; function to be called on prop access, call, or bothd = new Multimix { handler, }
returns the handler wrapped into a proxy- the
Multimix
instance is accessible asd[Multimix.symbol]
.Multimix.symbol
is a private symbol and thus guaranteed not to overwrite or shadow an existing property - existing properties of
handler
will be returned - non-existant properties of
handler
will be auto-generated on first access; these will be functions that, when called with any number of argumentsf P...
, will in turn callhandler props, P...
handler
will be called in the context ofhub
where given; otherwise, its context will be theMultimix
instance.
hub
: optional reference / base object (re 'hub': as if props were spokes)cfg.create
:true
(default): missing props will be auto-generated as functions that callhandler
in the context ofcfg.hub
where given (or else theMultimix
instance)false
: no missing props will be generated- a function: to be called as
create key, target
when a new property is first accessed; this function may or may not create a new property as seen fit. The MultiMix proxy will, at any rate, returntarget[ key ]
which may or may not beundefined
.
cfg.strict
: (defaultfalse
) if set totrue
, trying to access an unset property will cause an error. This setting is only valid when used in conjunction withcreate: false
.cfg.oneshot
: (defaultfalse
) if set totrue
, trying to re-assign any value to an existing property will cause an errorcfg.deletion
: (defaulttrue
) if set tofalse
, trying to delete any property will cause an errorcfg.hide
: (defaulttrue
) if set totrue
, will make auto-generated properties non-enumerable so they don't show up in console output
To Do
- [–] documentation
Is Done
- [+]
cfg.strict
- [+]
cfg.oneshot
- [+]
cfg.deletion