arguments.callee in Harmony

Charles Jolley charles at
Thu Sep 24 15:55:58 PDT 2009

> Given your example, a named function expression would do the job  
> trivially:
> ClassB = ClassA.extend({
>   foo: function foo() {
>     foo.base.apply(this, arguments); // calls super!
>     // other code
>   }
> });

This works but, as I said, this approach has a couple of drawbacks:

1. The function has to be named twice (foo: function foo()).  This  
makes the code harder to read (especially with long names) and its not  
very developer-friendly since its pointless cruft.

2. This is also fragile.  If you forget the second name, the code  
would still parse but it will be seriously broken.  Additionally, if  
you decided to rename the function you would also have to edit the  
code on the inside.  Hurts the "copy and paste" aspect of it.

In general I think this particular approach is not developer friendly  


> It is likely to be both faster and safer than arguments.callee as  
> both arguments and callee can be overridden, and the lookup up for  
> 'foo' is guaranteed.

Agreed on the faster side of things but, as I said, I think there are  
developer-friendlyness issues with this approach that make it  
unsuitable as a general solution for this pattern.

I would rather have a way to get at the currently running function w/o  
having to go through arguments.  I have no love lost with arguments. :-)

> One other thing to consider is that arguments.callee is only invalid  
> in strict mode -- arguments.callee will continue to work fine in the  
> general case.

True.   My assumption is that strict mode is defined so that you can  
continue to run older code until you can transition it.  in other  
words, one should aspire to convert all of their code to strict mode  
at some time; compatibility mode is intended just to help transition.

In that is the case, then "strict" mode should be able to implement a  
common design pattern like method overloading in a friendly way,  
otherwise developers may never convert.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list