Object.define ==> Object.mixin??

Brandon Benvie brandon at brandonbenvie.com
Wed Dec 12 14:27:11 PST 2012


The spec says for the various Object functions that the properties are
iterated in "list order". Doesn't this indicate the order is defined?


On Wed, Dec 12, 2012 at 4:57 PM, John J Barton
<johnjbarton at johnjbarton.com>wrote:

>
>
>
> 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/89c32cfc/attachment.html>


More information about the es-discuss mailing list