Object.mixin( source, target ) | arguments changed

Andrea Giammarchi andrea.giammarchi at gmail.com
Thu Jun 13 16:34:57 PDT 2013


oh dear ... I forgot I wrote that Trait proof already ... well ... I am
willing to change/improve/modify that script if necessary, just let me know
what's the final decision (yep, that was an early shim out of emtpy specs
:D)

thanks for pointing that out


On Thu, Jun 13, 2013 at 4:18 PM, Peter Seliger <peter.seliger at googlemail.com
> wrote:

> If one thinks about how Andrea Giammarchi might have come up
> with his already reliable implementation of [Object.mixin] ...
>
> [
> https://github.com/WebReflection/object-mixin/blob/master/src/object-mixin.js
> ]
>
> ... the need for changing the order of arguments most probably
> will become less desirable.
>
> It combines both approaches that today's developers rely on
> if they try to "extend" or "augment" objects. If it was just
> for the many implementations of [*.extend] that do stepwise
> copy properties from one object to another it wasn't even worth
> discussing it. The second approach mostly gets referred to as
> "functional or function based mixins" - and Andrea's implementation
> of [Object.mixin] ...
>
>   function (
>     target, // object to enrich with
>     source, // mixin object or Trait (Function)
>     args    // optional arguments for Trait
>   ) { ... }
>
> ... considers the different variants of this composition
> pattern by providing/allowing a third parameter for what
> I'm willing to call a "Privileged Trait" or a "Privileged Mixin".
>
>   var
>     PrivilegedTrait = function (injectedReadOnlyState) {
>       // implementation
>     },
>
>     obj = {
>       // description
>     }
>   ;
>   PrivilegedTrait.call(obj, {state:"readonly"});
>
> //source.apply(target, args);
>
> Looking at the last line of the given example above there
> was really no other solution than Andrea came up with in
> order to support in a future proof way what already exists
> today in various ways - though neither amount nor precedence
> of this methods arguments should be changed.
>
> Secondly. What are the advantages of invoking [Object.mixin]
> with more than one source over the disadvantage of loosing
> this methods clean interface if there is [Array.forEach] ...
>
> [source_A, source_B, source_C].forEach(function (source) {
>   Object.mixin(target, source);
> });
>
>
> Thirdly. Andrea's approach easily can be "shimmed" for ES3
> and does not hide JavaScript's natural/native predisposition
> for Trait/Mixin composition under to much syntactic sugar.
>
> Last. Only if there should ever the naming of "mixin"
> seriously be questioned again I would propose to choose
> [Object.compose] as an alternative.
>
>
> additional links that might proof what I just brought into discussion:
> [http://www.mail-archive.com/es-discuss@mozilla.org/msg22677.html]
> [https://github.com/petsel/javascript-code-reuse-patterns]
> [
> https://github.com/petsel/javascript-code-reuse-patterns/blob/master/source/components/composition/Traits/PrivilegedTrait.js
> ]
> [
> https://github.com/petsel/javascript-code-reuse-patterns/blob/master/source/components/composition/Mixins/PrivilegedMixin.js
> ]
>
>
> thanks - Peter
>
>
>
> On Thu, Jun 13, 2013 at 5:38 PM, Tobias Buschor
> <tobias.buschor at gmail.com> wrote:
> >
> > I propose to change the arguments.
> >
> > The second argument "target" is optional and default to
> "Object.create(null)"
> > The return-value is the modified target
> >
> > Advantages:
> >  - Without the second argument, we can copy the source
> >  - It is more natural to say "mixin the source into the target" =>
> misin.(source, target)
> >
> > Disadvantages
> >  - Its not suitable to extend the function to accept multiple sources in
> the future
> >
> > _______________________________________________
> > es-discuss mailing list
> > es-discuss at mozilla.org
> > https://mail.mozilla.org/listinfo/es-discuss
> >
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20130613/bf98c9cf/attachment-0001.html>


More information about the es-discuss mailing list