Why is arguments.callee.caller.name undefined?

后端 未结 4 1433
猫巷女王i
猫巷女王i 2021-01-25 04:59

How come this doesn\'t alert \"http://127.0.0.1/sendRequest\"? (Available at http://jsfiddle.net/Gq8Wd/52/)

var foo = {
    sendRequest: function() {
        ale         


        
相关标签:
4条回答
  • 2021-01-25 05:25

    Because the function that is calling the function being called is an anonymous function (and hence, has no name).

    Try:

    function sendRequest() {
        alert(bar.getUrl());
    }
    
    var foo = {
        sendRequest: sendRequest
    };                    
    
    var bar = {
        getUrl: function() {
            return 'http://127.0.0.1/' + arguments.callee.caller.name;
        }
    };
    
    foo.sendRequest();
    
    0 讨论(0)
  • 2021-01-25 05:33

    If you do this:

    var foo = {
        sendRequest: function() {
            alert(bar.getUrl());
        }
    };                    
    
    var bar = {
        getUrl: function() {
            return  arguments.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() {

    0 讨论(0)
  • 2021-01-25 05:38

    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 [fiddle].

    var foo = {
        sendRequest: function sendRequest() {
    
    0 讨论(0)
  • 2021-01-25 05:45

    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.

    0 讨论(0)
提交回复
热议问题