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 things -
cfg
:-
cfg.handler
: mandatory property; function to be called on prop access, call, or both-
d = 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 error -
cfg.deletion
: (defaulttrue
) if set tofalse
, trying to delete any property will cause an error -
cfg.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