Object.assign and exceptions (was: Object.assign and __proto__ property)

André Bargull andre.bargull at udo.edu
Tue Oct 22 07:18:29 PDT 2013



On 10/22/2013 4:00 PM, Erik Arvidsson wrote:
> The spec for Object.assign,
> http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign,
> seems to have some issues.
>
> /gotAllNames/ is never read.

It is initialised to false in step 7, read in step 9 and set to true in 
step 9c. That seems to be ok.


>
> What is the intention regarding exceptions? Is the intention to continue
> assigning properties after an exception is thrown. Why is that the
> desired behavior?

I'd guess to align behaviour with Object.mixin, Object.defineProperties, 
(Object.create), Object.is{Sealed,Frozen} and Object.seal/freeze. This 
was also covered in the thread starting at 
https://mail.mozilla.org/pipermail/es-discuss/2012-December/027067.html .


- André

>
> On Tue, Oct 22, 2013 at 6:41 AM, André Bargull <andre.bargull at udo.edu
> <mailto:andre.bargull at udo.edu>> wrote:
> ...
>  > A more conformant implementation should be this one:
>  >
>  > function assign(target, source) {
>  >   function ToObject(o) {
>  >     if (o == null) {
>  >       throw new TypeError();
>  >     }
>  >     return Object(o);
>  >   }
>  >   var to = ToObject(target);
>  >   var from = ToObject(source);
>  >   var keys = $getOwnPropertyNames(from);
>  >   var pendingException = null;
>  >   for (var i = 0, length = keys.length; i < length; ++i) {
>  >     var nextKey = keys[i];
>  >     try {
>  >       var desc = $getOwnPropertyDescriptor(from, nextKey);
>  >       if (desc !== undefined && desc.enumerable) {
>  >         to[nextKey] = from[nextKey];
>  >       }
>  >     } catch (e) {
>  >       if (pendingException !== null) {
>  >         pendingException = e;
>  >       }
>  >     }
>  >   }
>  >   if (pendingException !== null) {
>  >     throw pendingException;
>  >   }
>  >   return to;
>  > }
>  >
>  >
>  > - André
>  >
>
>
> --
> erik


More information about the es-discuss mailing list