<div dir="ltr">I'd love to see caller dead **only** after a well engineered solution take its place and is widely adopted, which is the reason I've asked about this future solution I've never seen discussed here.<div>
<br></div><div>So, the question is: is there any plan to discuss, to put in agenda, to bring, a "caller" alternative to ES.next ?</div><div><br></div><div>Thanks </div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Fri, Mar 8, 2013 at 1:25 PM, Kevin Gadd <span dir="ltr"><<a href="mailto:kevin.gadd@gmail.com" target="_blank">kevin.gadd@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div>The way caller is a single attribute of the function object arguably makes it useless for authoring reusable code: it breaks in the presence of reentrance, and requires you to keep an accessible reference to every function that might want to know its caller, exposing you to leaks and making closures harder to use in such scenarios.<br>

<br>
The problems it's intended to solve are important, but it's a really poor solution to them. I'd love to see caller dead for good and a well engineered solution take its place.<br>
-kg (mobile)<br><br><div class="gmail_quote">Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>> wrote:<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div><div class="h5">
<div dir="ltr">I wonder if there's any discussion about it for ES.next<div><br></div><div>while callee has always been kinda pointless in my opinion, caller property is not replaceable at all.</div><div><br>
</div><div>Internally, for scope lookup reasons, the caller is always passed somehow, except, I guess, where there's no caller access and the function is optimized thanks to absent outer scope look up.</div><div>
<br></div><div>Why caller? Because there's no other way to understand which method invoked a getter, as the very most basic example.</div><div><br></div><div>var obj = Object.defineProperty({}, "caller", {get: function get(){</div>

<div>  return get.caller;</div><div>}});</div><div><br></div><div>obj.method = function method() {</div><div>  alert(this.caller === method);</div><div>};</div><div><br></div><div>
This opens doors to debuggers (introspection) and APIs magic quite a lot.</div><div><br></div><div>2 extra points:</div><div>  1) I have not even mentioned arguments, which is not mandatory for caller</div>
<div>  2) I haven't used callee and I don't care about callee</div><div><br></div><div>Last, but not least, the more I think about the inability to switch "strict mode" in the wild the more patterns from ES3 injected into ES.next come up in my mind.</div>

<div><br></div><div>Thanks for any sort of response</div></div>
<p style="margin-top:2.5em;margin-bottom:1em;border-bottom:1px solid #000"></p></div></div><pre style="white-space:pre-wrap;word-wrap:break-word;font-family:sans-serif;margin-top:0px"><hr><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" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br></pre></blockquote></div></div></div></blockquote></div><br></div>