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.

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.
-kg (mobile)

Andrea Giammarchi <andrea.giammar...@gmail.com> wrote:

>I wonder if there's any discussion about it for ES.next
>
>while callee has always been kinda pointless in my opinion, caller
>property
>is not replaceable at all.
>
>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.
>
>Why caller? Because there's no other way to understand which method
>invoked
>a getter, as the very most basic example.
>
>var obj = Object.defineProperty({}, "caller", {get: function get(){
>  return get.caller;
>}});
>
>obj.method = function method() {
>  alert(this.caller === method);
>};
>
>This opens doors to debuggers (introspection) and APIs magic quite a
>lot.
>
>2 extra points:
>1) I have not even mentioned arguments, which is not mandatory for
>caller
>  2) I haven't used callee and I don't care about callee
>
>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.
>
>Thanks for any sort of response
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>es-discuss mailing list
>es-discuss@mozilla.org
>https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to