<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>Using frozen objects and such seems a lot more complex to me than just using a property. Using a symbol to hide the property from cluttering seems to go along with how other things are being done. And it's my understanding that other than hiding it that using a Symbol for a name is nothing special - does it have some negative factor that should make using it less attractive?<br><br>📱 <span style="font-size: 13pt;">Michael McGlothlin</span></div><div><br>On Sep 9, 2015, at 5:36 AM, Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com">andrea.giammarchi@gmail.com</a>> wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">That's similar to the Labeler proposed by Mark, except it needs to search for the thing twice (wm.has + wm.get instead of just wm.get which would be  just fine as check if you count from 1 instead of 0 ;-) )<div><br></div><div>Although I need to understand if you have a wm why wouldn't you just use that instead of a Symbol ... so the Labeler seems again a more appropriate pattern for this problem.</div><div><br></div><div>Just my thoughts</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 9, 2015 at 10:51 AM, Michał Wadas <span dir="ltr"><<a href="mailto:michalwadas@gmail.com" target="_blank">michalwadas@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Following solution will work:<br><span><div><br></div><div>(function(){<br></div><div>const wm = new WeakMap();<span class=""><br><span>Symbol.identity = Symbol( 'Symbol.identity' );<br></span></span></div><div>let i = 0;<br></div><div><span class=""><span><div>Object.defineProperty(</div><div>  Object.prototype,</div><div>  Symbol.identity,</div><div>  {</div></span><div>    get: function () {<br></div></span><div>      if (wm.has(this)) return wm.get(this);<br></div><div>      wm.set(this, Symbol(i++));<br></div><div>      return <span>wm.get(this)</span>;</div><div>    }</div><div>  }</div><div>);</div>})()<br></div></span><br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">2015-09-08 23:29 GMT+02:00 Andrea Giammarchi <span dir="ltr"><<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">as side note, that's just a lazy assignment that doesn't need two symbols and a constant get invoke ...<div><br></div><div>```js</div><div><span><div>Symbol.identity = Symbol( 'Symbol.identity' );</div></span><span><div>var OBJECT_ID = 0;</div><div>Object.defineProperty(</div><div>  Object.prototype,</div><div>  Symbol.identity,</div><div>  {</div></span><div>    get: function () {</div><div>      // first time this is invoked ... and no more ...</div><div>      Object.defineProperty(this, Symbol.identity, {value: ++OBJECT_ID});</div><div>      // from now own, direct property access \m/</div><div>      return this[Symbol.identity];</div><div>    }</div><div>  }</div><div>);</div></div><div>```</div><div><br></div><div>Regards </div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 8, 2015 at 9:57 PM, Michael McGlothlin <span dir="ltr"><<a href="mailto:mike.mcglothlin@gmail.com" target="_blank">mike.mcglothlin@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><font face="verdana, sans-serif">I try to keep it pretty simple. It's not fancy but the times you want fast and dirty information like this are the same times you don't want to have to define it manually.</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"> Symbol.identity = Symbol( 'Symbol.identity' );</font></div><div><font face="monospace, monospace"> const identity = Symbol( 'identity' );</font></div><div><font face="monospace, monospace"> var OBJECT_ID = 0;</font></div><div><font face="monospace, monospace"> Object.defineProperty( Object.prototype, Symbol.identity, {</font></div><div><font face="monospace, monospace">  get: () => {</font></div><div><font face="monospace, monospace">   if ( !Object.hasOwnProperty.call( this, identity ) ) {</font></div><div><font face="monospace, monospace">    this[ identity ] = ++OBJECT_ID;</font></div><div><font face="monospace, monospace">   }</font></div><div><font face="monospace, monospace">   return this[ identity ];</font></div><div><font face="monospace, monospace">  }</font></div><div><font face="monospace, monospace"> } );</font></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 8, 2015 at 1:44 PM, Mark S. Miller <span dir="ltr"><<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">See Labeler at<div><a href="http://wiki.ecmascript.org/doku.php?id=harmony:weak_maps#unique_labeler" target="_blank">http://wiki.ecmascript.org/doku.php?id=harmony:weak_maps#unique_labeler</a><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><div><div><br><div class="gmail_quote">On Tue, Sep 8, 2015 at 11:16 AM, joe <span dir="ltr"><<a href="mailto:joeedh@gmail.com" target="_blank">joeedh@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">Didn't send to list, something is wrong with my reply all. Sorry about that. Stupid mobile gmail.</p>
<div class="gmail_quote">---------- Forwarded message ----------<br>From: "joe" <<a href="mailto:joeedh@gmail.com" target="_blank">joeedh@gmail.com</a>><br>Date: Sep 8, 2015 11:15 AM<br>Subject: Re: Object id, hash, etc?<br>To: "Garrett Smith" <<a href="mailto:dhtmlkitchen@gmail.com" target="_blank">dhtmlkitchen@gmail.com</a>><br>Cc: <br><br type="attribution"><p dir="ltr">I agree with this request. This is the logical complement to valueof, I think. And yes, for most ID use cases this isn't a good fit, but we're not talking about the general case, just the cases where a python style id() function *is* appropriate.</p><span><font color="#888888">
<p dir="ltr">Joe</p></font></span><div><div>
<div class="gmail_quote">On Sep 8, 2015 9:08 AM, "Garrett Smith" <<a href="mailto:dhtmlkitchen@gmail.com" target="_blank">dhtmlkitchen@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 9/8/15, Michael McGlothlin <<a href="mailto:mike.mcglothlin@gmail.com" target="_blank">mike.mcglothlin@gmail.com</a>> wrote:<br>
> Is there a reason not to provide an object id and hash value as other<br>
> languages often do? I find myself defining an identity symbol on objects<br>
> with a value from a simple global counter. It makes it easier to debug if I<br>
> can just look at a log and see what objects and functions were active.<br>
><br>
> Likewise a hash value would simplify a lot of comparisons and make it easier<br>
> to debug.<br>
><br>
> I especially find the ID useful when working with bound functions as they<br>
> can be difficult to tell apart. I like to change toString() to provide the<br>
> ID followed by the code (flattened to one line).<br>
><br>
><br>
<br>
NFE's are safe to use where IE8 support isn't needed*.<br>
(function aa(){}).name; // "aa"<br>
<br>
As for using Object IDs and Object Pooling, lexically-scoped values<br>
have benefits over global ID generators (as your counter). The values<br>
can be passed in as a parameter to the Factory (useful with Private<br>
Proxy). There other benefits to this pattern regarding memory<br>
management and application design. Contact me if you'd like to learn<br>
more.<br>
<br>
* <a href="https://kangax.github.io/nfe/" rel="noreferrer" target="_blank">https://kangax.github.io/nfe/</a><br>
--<br>
Garrett<br>
@xkit<br>
<a href="http://ChordCycles.wordpress.com" rel="noreferrer" target="_blank">ChordCycles.wordpress.com</a><br>
<a href="http://garretts.github.io" rel="noreferrer" target="_blank">garretts.github.io</a><br>
<a href="http://personx.tumblr.com" rel="noreferrer" target="_blank">personx.tumblr.com</a><br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
</div></div></div>
<br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div></div></div><span><font color="#888888">-- <br><div>    Cheers,<br>    --MarkM</div>
</font></span></div>
<br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></blockquote></body></html>