検索

ホームページ  >  に質問  >  本文

在javascript的函数里能否获取到这个函数的名字

主要是在jsonp回调的时候会用到,对于一个有时序要求的jsonp回调函数,我需要从函数名里知道它到底是哪一个请求的回调,比如

var pos = 0;

setInterval(function () {
    var script = document.createElement('script');
    script.src = 'http://example.com/xxx.jsonp?callback=callback_' + pos;
    
    window['callback_' + pos] = function (o) {
        ....
    };
    
    document.body.appendChild(script);
    
    pos ++;
}, 10000);

我需要在window['callback_' + pos]的函数体里知道,我现在回调的是哪一个pos传过来的结果。js能知道当前定义的函数名吗,或者调用它时用到的函数名。

迷茫迷茫2895日前511

全員に返信(4)返信します

  • 大家讲道理

    大家讲道理2017-04-10 12:46:00

    function func_know_father(father) {
         return function () { alert(father); }
    }
    
    a = func_know_father("a");
    a();
    b = func_know_father("b");
    b();
    
    //--你大概可以这么用--
    function jsonp_func(pos){
        return function (o) {
            //do sth.
            //access pos
        };
    }
    
    setInterval(function() {
        //...
        window['callback_' + pos] = jsonp_func(pos);
    });

    用闭包把需要的变量绑上去就行了。

    返事
    0
  • 阿神

    阿神2017-04-10 12:46:00

    用get的方式读取这个文件,然后用正则匹配

    返事
    0
  • PHP中文网

    PHP中文网2017-04-10 12:46:00

    让后端把pos通过参数传进去。

    如果要用js获取function的名称的话,可以这样:
    非ie下用this.name,ie下只能用this.toString(),然后正则去找。

    不过你现在的情况不太适用,因为'callback_' + pos只是这个function的变量,这个function其实是个匿名函数,所以并不能取到function的名称。

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-10 12:46:00

    得到当前执行函数的的函数名----arguments.callee

    (function(){
        //arguments.callee就是当前的匿名函数的引用
       console.log(arguments.callee);
    })();

    得到调用该函数的函数名--------当前函数名.caller

    function a(){
        //a.caller得到的是b函数的引用
        console.log(a.caller);
    }
    function b(){
        a();
    }
    b();

    返事
    0
  • キャンセル返事