Connecting Tech Pros Worldwide Help | Site Map

Functions: call / apply / f()

Philippe Poulard
Guest
 
Posts: n/a
#1: Sep 5 '08
Hi folks !

I have some code like this that passes an anonymous function:
foo.bar(p1, function(p2) {
alert(p2);
});

in foo.bar, i create a button with a listener; when it is executed, the
following code fails to run:

bar : function(somePara, someFunction) {
...
someButton.addListener("execute", function(e) {
someFunction(someData);
});
...
}

I google for some documentation and this version works well:

bar : function(somePara, someFunction) {
...
someButton.addListener("execute", function(e) {
someFunction.call(null, someData);
});
...
}

I don't understand the difference between f.apply(), f.call() and f()
and why the latter doesn't work

In fact, when using f("foo") the function is executed (I'm sure of that
when I insert alert("Hello")), but without its argument if in the body
of the anonymous function i use alert(p2) it fails

Please can you explain this behaviour ?

--
Cordialement,

///
(. .)
--------ooO--(_)--Ooo--------
| Philippe Poulard |
-----------------------------
http://reflex.gforge.inria.fr/
Have the RefleX !
Martin Honnen
Guest
 
Posts: n/a
#2: Sep 5 '08

re: Functions: call / apply / f()


Philippe Poulard wrote:
Quote:
I have some code like this that passes an anonymous function:
foo.bar(p1, function(p2) {
alert(p2);
});
>
in foo.bar, i create a button with a listener; when it is executed, the
following code fails to run:
>
bar : function(somePara, someFunction) {
...
someButton.addListener("execute", function(e) {
someFunction(someData);
});
...
}
Do you get an error? Which one exactly?
Quote:
I google for some documentation and this version works well:
>
bar : function(somePara, someFunction) {
...
someButton.addListener("execute", function(e) {
someFunction.call(null, someData);
});
...
}
>
I don't understand the difference between f.apply(), f.call() and f()
and why the latter doesn't work
>
In fact, when using f("foo") the function is executed (I'm sure of that
when I insert alert("Hello")), but without its argument if in the body
of the anonymous function i use alert(p2) it fails
>
Please can you explain this behaviour ?
So the alert dialog does not appear? Have you checked the error console
of the browser?
I don't see a reason why f() should fail but f.call() should execute.

--

Martin Honnen
http://JavaScript.FAQTs.com/
Philippe Poulard
Guest
 
Posts: n/a
#3: Sep 5 '08

re: Functions: call / apply / f()


Martin Honnen a écrit :
Quote:
Philippe Poulard wrote:
>
Quote:
>I have some code like this that passes an anonymous function:
>foo.bar(p1, function(p2) {
> alert(p2);
>});
>>
>in foo.bar, i create a button with a listener; when it is executed, the
>following code fails to run:
>>
>bar : function(somePara, someFunction) {
> ...
> someButton.addListener("execute", function(e) {
> someFunction(someData);
> });
> ...
>}
>
Do you get an error? Which one exactly?
No because it is trapped by the framework within which it is executed
(that doesn't log it correctly); but it fails because i don't get the
alert box (I'm sure the block is executed because if I insert
alert("Hello"); before alert(p2); I see the former but not the latter)

Therefore, it seems that a reference to p2 make all the stuff crashing
Quote:
>
Quote:
>I google for some documentation and this version works well:
>>
>bar : function(somePara, someFunction) {
> ...
> someButton.addListener("execute", function(e) {
> someFunction.call(null, someData);
> });
> ...
>}
>>
>I don't understand the difference between f.apply(), f.call() and f()
>and why the latter doesn't work
>>
>In fact, when using f("foo") the function is executed (I'm sure of
>that when I insert alert("Hello")), but without its argument if in the
>body of the anonymous function i use alert(p2) it fails
>>
>Please can you explain this behaviour ?
>
So the alert dialog does not appear? Have you checked the error console
of the browser?
I don't see a reason why f() should fail but f.call() should execute.
ok, so it's not my fault :)
since f.call() works, I have changed to it in my code

--
Cordialement,

///
(. .)
--------ooO--(_)--Ooo--------
| Philippe Poulard |
-----------------------------
http://reflex.gforge.inria.fr/
Have the RefleX !
Closed Thread


Similar JavaScript / Ajax / DHTML bytes