Object.define ==> Object.mixin??

Allen Wirfs-Brock allen at wirfs-brock.com
Wed Dec 12 15:50:22 PST 2012


On Dec 12, 2012, at 2:27 PM, Brandon Benvie wrote:

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

Except that the List in question is created "containing the names of each enumerable own property of props" and it doesn't say in what order they are placed  when initially populating the list.

Allen

> 
> 
> 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/5efbe354/attachment.html>


More information about the es-discuss mailing list