<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">[Oh sorry, I'm behind on the iteration-order mega-thread. I'll have to catch up.]<div><br></div><div><div><div>On Mar 14, 2011, at 1:16 PM, David Herman wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi David,<div><br></div><div>We have a strawman for making the enumeration order well-specified:</div><div><br></div><div>    <a href="http://wiki.ecmascript.org/doku.php?id=strawman:enumeration">http://wiki.ecmascript.org/doku.php?id=strawman:enumeration</a></div><div><br></div><div>Would that not be sufficient for the defineProperties case? I'd prefer that to adding another trap.</div><div><br></div><div>Dave</div><div><br><div><div><div>On Mar 12, 2011, at 1:15 PM, David Bruant wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">
<div text="#000000" bgcolor="#ffffff">
    <font size="-1">Hi,<br>
      <br>
      The thread entitled "iteration order for Object" made me realize
      that there is no defineProperties trap.<br>
      <br>
      Let's imagine I'd like to implement an object which would keep
      track of order in which own properties have been added/deleted to
      it. With the defineProperty and delete traps I can already track
      order of addition/deletion and reflect it on the enumerate/keys
      trap when required.<br>
      <br>
      However, as of ES5, if I do:<br>
      Object.defineProperties(proxy, props)<br>
      then the defineProperty trap is called for each own property of
      props with an order chosen by the ES implementation (it's the same
      order than the one used in for..in which is
      implementation-dependent). Consequently, I cannot guarantee the
      object user that these keys will be enumerated with the order s/he
      provided them in props.<br>
      <br>
      A defineProperties trap could allow me to throw an error saying
      roughly "I can't garantee my invariant with such a call, please
      tell me explicitely the order you want for your properties by
      using several Object.defineProperty".<br>
      <br>
      It would obviously be a derived trap. The implementation is quite
      straightforward (based on ES5 Object.defineProperties algorithm
      15.2.3.7) with one subtility: when retrieving all own enumerable
      property names of the props object, if props is itself a proxy,
      then the keys trap of this proxy would be called.<br>
      <br>
      David<br>
    </font>
  </div>

_______________________________________________<br>es-discuss mailing list<br><a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br><a href="https://mail.mozilla.org/listinfo/es-discuss">https://mail.mozilla.org/listinfo/es-discuss</a><br></blockquote></div><br></div></div></div>_______________________________________________<br>es-discuss mailing list<br><a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>https://mail.mozilla.org/listinfo/es-discuss<br></blockquote></div><br></div></body></html>