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

