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?

📱 Michael McGlothlin

> On Sep 9, 2015, at 5:36 AM, Andrea Giammarchi <[email protected]> 
> wrote:
> 
> 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 ;-) )
> 
> 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.
> 
> Just my thoughts
> 
>> On Wed, Sep 9, 2015 at 10:51 AM, Michał Wadas <[email protected]> wrote:
>> Following solution will work:
>> 
>> (function(){
>> const wm = new WeakMap();
>> Symbol.identity = Symbol( 'Symbol.identity' );
>> let i = 0;
>> Object.defineProperty(
>>   Object.prototype,
>>   Symbol.identity,
>>   {
>>     get: function () {
>>       if (wm.has(this)) return wm.get(this);
>>       wm.set(this, Symbol(i++));
>>       return wm.get(this);
>>     }
>>   }
>> );
>> })()
>> 
>> 
>> 2015-09-08 23:29 GMT+02:00 Andrea Giammarchi <[email protected]>:
>>> as side note, that's just a lazy assignment that doesn't need two symbols 
>>> and a constant get invoke ...
>>> 
>>> ```js
>>> Symbol.identity = Symbol( 'Symbol.identity' );
>>> var OBJECT_ID = 0;
>>> Object.defineProperty(
>>>   Object.prototype,
>>>   Symbol.identity,
>>>   {
>>>     get: function () {
>>>       // first time this is invoked ... and no more ...
>>>       Object.defineProperty(this, Symbol.identity, {value: ++OBJECT_ID});
>>>       // from now own, direct property access \m/
>>>       return this[Symbol.identity];
>>>     }
>>>   }
>>> );
>>> ```
>>> 
>>> Regards 
>>> 
>>>> On Tue, Sep 8, 2015 at 9:57 PM, Michael McGlothlin 
>>>> <[email protected]> wrote:
>>>> 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.
>>>> 
>>>>  Symbol.identity = Symbol( 'Symbol.identity' );
>>>>  const identity = Symbol( 'identity' );
>>>>  var OBJECT_ID = 0;
>>>>  Object.defineProperty( Object.prototype, Symbol.identity, {
>>>>   get: () => {
>>>>    if ( !Object.hasOwnProperty.call( this, identity ) ) {
>>>>     this[ identity ] = ++OBJECT_ID;
>>>>    }
>>>>    return this[ identity ];
>>>>   }
>>>>  } );
>>>> 
>>>>> On Tue, Sep 8, 2015 at 1:44 PM, Mark S. Miller <[email protected]> wrote:
>>>>> See Labeler at
>>>>> http://wiki.ecmascript.org/doku.php?id=harmony:weak_maps#unique_labeler
>>>>> 
>>>>> 
>>>>> 
>>>>>> On Tue, Sep 8, 2015 at 11:16 AM, joe <[email protected]> wrote:
>>>>>> Didn't send to list, something is wrong with my reply all. Sorry about 
>>>>>> that. Stupid mobile gmail.
>>>>>> 
>>>>>> ---------- Forwarded message ----------
>>>>>> From: "joe" <[email protected]>
>>>>>> Date: Sep 8, 2015 11:15 AM
>>>>>> Subject: Re: Object id, hash, etc?
>>>>>> To: "Garrett Smith" <[email protected]>
>>>>>> Cc: 
>>>>>> 
>>>>>> 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.
>>>>>> 
>>>>>> Joe
>>>>>> 
>>>>>>> On Sep 8, 2015 9:08 AM, "Garrett Smith" <[email protected]> wrote:
>>>>>>> On 9/8/15, Michael McGlothlin <[email protected]> wrote:
>>>>>>> > Is there a reason not to provide an object id and hash value as other
>>>>>>> > languages often do? I find myself defining an identity symbol on 
>>>>>>> > objects
>>>>>>> > with a value from a simple global counter. It makes it easier to 
>>>>>>> > debug if I
>>>>>>> > can just look at a log and see what objects and functions were active.
>>>>>>> >
>>>>>>> > Likewise a hash value would simplify a lot of comparisons and make it 
>>>>>>> > easier
>>>>>>> > to debug.
>>>>>>> >
>>>>>>> > I especially find the ID useful when working with bound functions as 
>>>>>>> > they
>>>>>>> > can be difficult to tell apart. I like to change toString() to 
>>>>>>> > provide the
>>>>>>> > ID followed by the code (flattened to one line).
>>>>>>> >
>>>>>>> >
>>>>>>> 
>>>>>>> NFE's are safe to use where IE8 support isn't needed*.
>>>>>>> (function aa(){}).name; // "aa"
>>>>>>> 
>>>>>>> As for using Object IDs and Object Pooling, lexically-scoped values
>>>>>>> have benefits over global ID generators (as your counter). The values
>>>>>>> can be passed in as a parameter to the Factory (useful with Private
>>>>>>> Proxy). There other benefits to this pattern regarding memory
>>>>>>> management and application design. Contact me if you'd like to learn
>>>>>>> more.
>>>>>>> 
>>>>>>> * https://kangax.github.io/nfe/
>>>>>>> --
>>>>>>> Garrett
>>>>>>> @xkit
>>>>>>> ChordCycles.wordpress.com
>>>>>>> garretts.github.io
>>>>>>> personx.tumblr.com
>>>>>>> _______________________________________________
>>>>>>> es-discuss mailing list
>>>>>>> [email protected]
>>>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>>> 
>>>>>> _______________________________________________
>>>>>> es-discuss mailing list
>>>>>> [email protected]
>>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>> 
>>>>> 
>>>>> 
>>>>> -- 
>>>>>     Cheers,
>>>>>     --MarkM
>>>>> 
>>>>> _______________________________________________
>>>>> es-discuss mailing list
>>>>> [email protected]
>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>> 
>>>> 
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> [email protected]
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>> 
>>> 
>>> _______________________________________________
>>> es-discuss mailing list
>>> [email protected]
>>> https://mail.mozilla.org/listinfo/es-discuss
> 
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to