Object.define ==> Object.mixin??

John J Barton johnjbarton at johnjbarton.com
Wed Dec 12 13:57:08 PST 2012


On Wed, Dec 12, 2012 at 11:13 AM, Allen Wirfs-Brock
<allen at wirfs-brock.com>wrote:

>
> On Dec 12, 2012, at 10:10 AM, John J Barton wrote:
>
> On Wed, Dec 12, 2012 at 10:05 AM, Allen Wirfs-Brock <allen at wirfs-brock.com
> > wrote:
>
>>
>> On Dec 12, 2012, at 9:50 AM, John J Barton wrote:
>> ...
>> > But most of all we want this feature to land and not just spin around
>> here.
>> >
>> > jjb
>>
>> As Object.mixin or as Object.define??
>>
>
> Object.mixin
>
>
> What should be the effect of trying to "mixin" a property that already
> exists (as an own property) of the target object.
>
> Object.define(target,src) would presumably have redefined such properties
> using the Object.defineProperty rules. Is that what Object.mixin should do.
>  It could, have different rules.
>
> For example, it could simply replace an existing target property (if the
> existing property is configurable).  Or it could skip existing properties
> or throw an error if a property exists.
>
> Replace is attractive, but it may or may not be what you want for accessor
> properties.  Consider:
>
> var objTarget = {get foo() {/*target*/...}});
> Object.mixin(objTarget, {set foo(v) {/*src*/...}});
>
> after the mixin do you want objTarget to look like:
>    {set foo(v) {/*src*/...}}   //replace semantics gives you this
> or
>    {set foo(v) {/*src*/...},
>     get foo() {/*target*/...} }  //Object.defineProperty semantics gives
> you this
>

The general character of Object.mixin is to produce an object with all of
the properties of both arguments. In the case of duplicate *properties* we
want replace LHS with RHS. In my opinion your example is not such a
duplicate. Rather we have two functions one on each argument. I would
expect the general character to apply: two functions on the result.

Or maybe this should just throw. Either of the above choices will cause
surprising errors if the developer expected the other result.

jjb



>
> Allen
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20121212/776bee4a/attachment.html>


More information about the es-discuss mailing list