<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default"><span style="color:rgb(0,0,0);font-family:georgia,serif;font-size:small">> </span><font color="#000000" face="georgia, serif">WeakSets are perfect for branding and are how I would expect web platform class branding to be explained.</font></div><div class="gmail_default"><span style="color:rgb(0,0,0);font-family:georgia,serif">> <br>> ```js<br>> </span><font color="#000000" face="georgia, serif">const foos = new WeakSet();</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">> </font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">> class Foo {</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">>   constructor() {</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">>     foos.add(this);</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">>   }</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">>   </font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">>   method() {</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">>     if (!foos.has(this)) {</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">>       throw new TypeError("Foo.prototype.method called on an incompatible object!");</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">>     }</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">>   }</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">> }</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">> ```</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif"><br></font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">Just curious, is that effectively the same as what the (current) [private fields proposal](<a href="https://github.com/tc39/proposal-class-fields">https://github.com/tc39/proposal-class-fields</a></font><span style="color:rgb(0,0,0);font-family:georgia,serif">) offers?</span></div><div class="gmail_default"><font color="#000000" face="georgia, serif"><br></font></div><div class="gmail_default"><font color="#000000" face="georgia, serif">```js</font></div><div class="gmail_default"><font color="#000000" face="georgia, serif"><div class="gmail_default">class Foo {</div><div class="gmail_default">  #isFoo = true</div><div class="gmail_default"><br></div><div class="gmail_default">  method() {</div><div class="gmail_default">    if (this.#isFoo) {</div><div class="gmail_default">      throw new TypeError("Foo.prototype.method called on an incompatible object!");</div><div class="gmail_default">    }</div><div class="gmail_default">  }</div><div class="gmail_default">}<br>```</div><div class="gmail_default"><br></div><div class="gmail_default">- Joe</div></font></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>