name property for built-in functions??

Juriy Zaytsev kangax at
Tue Mar 10 18:22:56 PDT 2009

On Mar 10, 2009, at 8:29 PM, Garrett Smith wrote:


> Maciej' Function.create proposal:-
> Function.create("[Foo bar]", "param1", "param2", "code(); goes();  
> here();");
> - uses strings to create a function. Escaping strings in strings is
> awkward to read and write. Refactoring a function into strings to
> arguments to Function.create would be tedious and error-prone.
> Especiall if the soure already contains strings in strings (html = "<p
> id='p'>p<\/p>". Using with strings to build functions cumbersome.

Agreed. That would be messy.

> Eval uses the calling context's scope. I do not know what the scope
> would be for a function created with Function.create.  To use the
> calling context's scope would seem to be not secure. However, it would
> seem necessary to wrap a function.
> Possible alternative:-
>  Function.create( name, fun[, context] );

I can't think of a better alternative at the moment. What's weird  
about such notation though, is that `Function.create` doesn't quite  
fit the description any longer. Function object is being created  
during evaluation, *before* it's being passed to `Function.create` as  
the last argument. What `Function.create` does is merely setting/ 
modifying an Identifier on a given function. It seems that  
`Function.setName` (or some such) would convey an intent better.

Function.setName('name', function(){ ... });

On a side note, what happens when you pass a function with already  
existing identifier? Would it be overwritten or left intact?

Function.create('foo', function bar(){ });

And finally, I assume that some kind of error would be thrown if  
`name` string can not be parsed as an identifier?

Juriy Zaytsev
Core developer, Prototype.js
kangax at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Es-discuss mailing list