Object id, hash, etc?

Michał Wadas michalwadas at gmail.com
Wed Sep 9 09:51:07 UTC 2015


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 <andrea.giammarchi at gmail.com>:

> 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 <
> mike.mcglothlin at gmail.com> 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 <erights at google.com>
>> 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 <joeedh at gmail.com> wrote:
>>>
>>>> Didn't send to list, something is wrong with my reply all. Sorry about
>>>> that. Stupid mobile gmail.
>>>> ---------- Forwarded message ----------
>>>> From: "joe" <joeedh at gmail.com>
>>>> Date: Sep 8, 2015 11:15 AM
>>>> Subject: Re: Object id, hash, etc?
>>>> To: "Garrett Smith" <dhtmlkitchen at gmail.com>
>>>> 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" <dhtmlkitchen at gmail.com> wrote:
>>>>
>>>>> On 9/8/15, Michael McGlothlin <mike.mcglothlin at gmail.com> 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
>>>>> es-discuss at mozilla.org
>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>>
>>>>
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> es-discuss at mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>>>
>>>
>>>
>>> --
>>>     Cheers,
>>>     --MarkM
>>>
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss at mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>>>
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150909/80324756/attachment-0001.html>


More information about the es-discuss mailing list