Would anyone mind sharing some examples of the use cases Andrea and Andy mentioned?
On Tue, Apr 23, 2019 at 6:32 AM Michał Wadas <[email protected]> wrote: > You can't do "branding" by properties on frozen objects. > > On Tue, 23 Apr 2019, 13:44 Andy Earnshaw, <[email protected]> wrote: > >> This is pretty much what I used it for in a previous job role. We loaded >> and unloaded various iframes, registering APIs and custom elements inside >> them, adding the `window` object to a WeakSet so the initialisation only >> ran once. >> >> On Tue, 23 Apr 2019 at 10:26, Andrea Giammarchi < >> [email protected]> wrote: >> >>> WeakSet can be very useful in general to avoid *any* object to be >>> visited/setup twice, not just those coming from user-land classes. >>> >>> Circular references, mixins, DOM nodes one-off events handling, and so >>> on and so fort. >>> >>> On Mon, Apr 22, 2019 at 8:26 PM #!/JoePea <[email protected]> wrote: >>> >>>> (I edited the broken format of my previous post) >>>> >>>> What other use cases are there? >>>> >>>> On Mon, Apr 22, 2019 at 11:20 AM #!/JoePea <[email protected]> wrote: >>>> >>>>> > WeakSets are perfect for branding and are how I would expect web >>>>> platform class branding to be explained. >>>>> > >>>>> > ```js >>>>> > const foos = new WeakSet(); >>>>> > >>>>> > class Foo { >>>>> > constructor() { >>>>> > foos.add(this); >>>>> > } >>>>> > >>>>> > method() { >>>>> > if (!foos.has(this)) { >>>>> > throw new TypeError("Foo.prototype.method called on an >>>>> incompatible object!"); >>>>> > } >>>>> > } >>>>> > } >>>>> > ``` >>>>> >>>>> Just curious, is that effectively the same as what the (current) >>>>> [private fields proposal]( >>>>> https://github.com/tc39/proposal-class-fields) offers? >>>>> >>>>> ```js >>>>> class Foo { >>>>> #isFoo = true >>>>> >>>>> method() { >>>>> if (this.#isFoo) { >>>>> throw new TypeError("Foo.prototype.method called on an >>>>> incompatible object!"); >>>>> } >>>>> } >>>>> } >>>>> ``` >>>>> >>>>> - Joe >>>>> >>>> _______________________________________________ >>>> 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 >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

