<div dir="ltr"><div dir="ltr">The engine only has that knowledge when you call it in `a.b()` form - at which point, `this` is already the instance. For a keyword to not be context dependent, it'd have to be the instance even when you'd done something like `const { b } = a; b()`. To do this would require either a) `a` has its own distinct copy of `b` that's bound to `a`, or b) `a.b` to be a getter that does that binding upon request.</div><div dir="ltr"><br></div><div>Constructor-binding, field-binding, or arrow function fields all work the same way - they create a separate copy of a function for *each and every* instance, so that the function can point back to the instance even when extracted off of the object.</div><div><br></div><div>I'm not clear on how there'd be any other way to do it.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Mar 9, 2019 at 1:41 PM john larson <<a href="mailto:johnlarsondev1@gmail.com">johnlarsondev1@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">Although the method lives on the prototype, the engine should already have knowledge of the object whose method is being invoked. I am not an expert on the internal workings of the engine, so I would be glad if anyone would correct me on this if I am wrong.</div><div id="gmail-m_-8660865756228832385DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br>
<table style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(211,212,222)">
        <tbody><tr>
        <td style="width:55px;padding-top:13px"><a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon" target="_blank"><img src="https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif" alt="" width="46" height="29" style="width: 46px; height: 29px;"></a></td>
                <td style="width:470px;padding-top:12px;color:rgb(65,66,78);font-size:13px;font-family:Arial,Helvetica,sans-serif;line-height:18px">Virus-free. <a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link" style="color:rgb(68,83,234)" target="_blank">www.avast.com</a>
                </td>
        </tr>
</tbody></table><a href="#m_-8660865756228832385_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1" height="1"></a></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Mar 10, 2019 at 12:27 AM Jordan Harband <<a href="mailto:ljharb@gmail.com" target="_blank">ljharb@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">An additional keyword like this would require a function to have a hidden reference back to the instance. However, especially for `class` methods, but also for ES5-style inheritance, or even for `class Foo {} Foo.prototype.bar = function () {}`, methods are *shared*. You might have a billion instances, but only one function that uses your new keyword - how would the engine know which instance you were referring to?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Mar 9, 2019 at 7:50 AM Bergi <<a href="mailto:a.d.bergi@web.de" target="_blank">a.d.bergi@web.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi John,<br>
<br>
> I believe that it would be a trivial task for<br>
> current static code analyzers to restrict usage of "this" for anyone<br>
> opting in to use this new keyword exclusively.<br>
<br>
Static tooling, like the TypeScript compiler, can detect problematic<br>
method usage already today. Sure, having a dedicated syntax for this<br>
will make static analysis simpler, but I don't deem that a worthy<br>
addition to the language.<br>
<br>
> As you mentioned, arrow functions might have their own<br>
> problems. Wouldn't such an alternative keyword be a good addition to our<br>
> toolkit anyway?<br>
<br>
What I was trying to say is that your proposed alternative has exactly<br>
the same problems as instance-member arrow functions have today.<br>
<br>
Best regards,<br>
  Bergi<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div></div>
</blockquote></div>
</blockquote></div></div>