Why Is Arguments.callee.caller.name Undefined?
Solution 1:
Putting a value in an object literal, as you're doing, doesn't affect the value at all.
var foo = {
sendRequest: ...
The function value is only affected by the function expression, which doesn't contain a name.
... function() {
alert(bar.getUrl());
}
You need to include the name you want in the function expression itself .
var foo = {
sendRequest: function sendRequest() {
Solution 2:
If you do this:
var foo = {
sendRequest: function() {
alert(bar.getUrl());
}
};
var bar = {
getUrl: function() {
returnarguments.callee;
}
};
foo.sendRequest();
You will notice that the function doesn't have name which is true:
function() {
This is anonymous function.
You can name you method : sendRequest: function myMethodName() {
Solution 3:
Although the function is stored under the object property foo.sendRequest
, and thus can be invoked via foo.sendRequest()
, that function itself doesn't actually have a name. That's why arguments.callee.caller.name
is empty.
Solution 4:
Because the function that is calling the function being called is an anonymous function (and hence, has no name).
Try:
functionsendRequest() {
alert(bar.getUrl());
}
var foo = {
sendRequest: sendRequest
};
var bar = {
getUrl: function() {
return'http://127.0.0.1/' + arguments.callee.caller.name;
}
};
foo.sendRequest();
Post a Comment for "Why Is Arguments.callee.caller.name Undefined?"