On Sep 27, 2013, at 9:44 PM, Kevin Smith wrote:

> 
> 
> All the noise we made about Object.extend was unclear? From jQuery:
> 
> https://github.com/jquery/jquery/blob/master/src/core.js#L157
> 
> Many similar functions, going back to Prototype's Object.extend:
> 
> Object.extend = function(destination, source) {
>   for (var property in source)
>     destination[property] = source[property];
>   return destination;
> };
> 
> Thanks.  I believe this supports my position.  Regardless of how @iterator is 
> defined, consider this:
> 
>     extendObject(target, someObjectWithIterator);
> 
> If `someObjectWithIterator` has an @iterator method (be it string or symbol 
> keyed), I would expect that after this statement runs, `target` would also 
> have that @iterator method.  To write it a different way:
> 
>     extendObject(target, {
>       "@iterator"() {}
>     });
> 
> Or:
> 
>     extendObject(target, {
>       [Symbol.iterator]() {}
>     });
> 
> Either way I would be surprised if the "iterator" function was **not** 
> copied.  I think this example argues for enumerability, at least in some 
> cases.  Or equivalently, not all meta-level hooks appear to want 
> non-enumerability.
> 
> { Kevin }


Note that ES6 provides two built-in functions that provide Object.extend-like 
functionality.  One that uses enumerability and assignment semantics and one 
that ignores enumerability and uses property definition semantics:

Object.assign
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-19.1.3.1 

Object.mixin
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-19.1.3.15 

When people start using those, they will be expressing an implicit intent.

It is for legacy libraries such as jquery Object.extend where the intent 
regarding meta=level properties is unclear.

Allens
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to