But you have to call the function the same thing every time. What Red
wants to do is call it something different depending on the arguments.
The best solution I know of is to use an eval to wrap the function:
function rename(f, name) {
return eval('(function ' + name + '() { return f.apply(this,
arguments); })');
}
function compose(f, g, name) {
return rename(function() {
return f(g.apply(this, arguments));
}, name);
}
Evals are ugly, though, even when relatively isolated like this. But
it does work.
- Luke
On Jul 29, 7:50 pm, Nicolas Hatier <[email protected]> wrote:
> You can use this syntax:
>
> function compose (fn1, fn2) {
> // returns a function that calls fn1 with the result of fn2
> function inner() {
> return fn1( fn2.apply(null, arguments))
> }
>
> return inner;
>
> }
>
> This is perfectly valid javascript and will do exactly what you want, while
> providing a name for the inner function.
>
> Regards
> NH
>
> reddaly wrote:
>
> > On Jul 28, 3:09 pm, johnjbarton <[email protected]> wrote:
>
> >> On Jul 28, 2:23 pm, reddaly <[email protected]> wrote:
> >> ...
>
> >>>> Nevertheless I am interested in any incremental suggestions about
> >>>> function names.
>
> >>> My suggestion is to inspect the function object for an explicit, user-
> >>> defined name.
>
> >> I've heard this suggestion before, I didn't understand it. If you
> >> don't want anonymous functions, why don't you just name them? I mean
> >> aren't function names are exactly equal to explicit user-defined
> >> names?
>
> > You suggest using a form like
>
> > function myName() { ...}
>
> > instead of
>
> > var x = function () { ...}
>
> > x.firebugName = "myName"
>
> > However, this does not always work out. Consider the case where a
> > function returns another function.
>
> > function compose (fn1, fn2) {
> > // returns a function that calls fn1 with the result of fn2
> > return function() { return fn1( fn2.apply(null, arguments)) }
> > }
>
> > Here, there is no sensible way to name the composed function (other
> > than "composed function," which does not give any context about the
> > functions it comprises). Ideally, you would like to name it something
> > recognizable. e.g. compose(tagName, firstTag) would be named
> > "tagName_firstTag." The way to accomplish this best is to set a
> > property on the function that firebug will inspect.
>
> > Best regards,
> > Red
>
> >> jjb
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Firebug" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/firebug?hl=en
-~----------~----~----~----~------~----~------~--~---