On Mar 1, 2009, at 10:28 AM, Allen Wirfs-Brock wrote:

From: Brendan Eich [mailto:[email protected]]
What should (new Function).name or (equivalently) Function().name return? Precedent in some engines:

js> (new Function).name
anonymous

An anonymous function expression returns the empty string in some implementations:

js> (function(){}).name

js> typeof (function(){}).name
string
js> (function(){}).name.length
0

I have a hard time buying (new Function).name === "anonymous" when (function(){}).name==="".

Me too, FWIW. I don't think this Function-constructor case is as important as the anonymous function expression one.


While it may go against precedent I think it would be more useful if (new Function).name === "new Function".

That's better than "anonymous". I'm not so sure it's better than "" or undefined, based on use-case arguments below.


I can live with (function(){}).name==="" although (function() {}).name==="anonymous function" would probably be better.

If the use-case is diagnostics of the form "unexpected argument to " + funarg.name, then you're right. If the use-case is forking control flow based on anonymous vs. named function expression (or definition) then "" or even undefined is better.

Without more evidence, I would be in favor of a concise "no name" value, and since at least some implementations (Rhino, SpiderMonkey -- not sure about IE, can't test at home) use "", "" beats undefined by that criterion.

Using undefined as the "no name" value happens to match ES3 results for any function's name property, but that does not seem helpful for cross-browser scripts. Any new use of the name property might want to be conditional (a la "object detection"), even for anonymous functions.

It's hard to be sure without more user feedback, though.

/be
_______________________________________________
Es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to