Vraag Javascript zoekfunctie vinden


Ik heb een functie in JS die vanaf meerdere plaatsen wordt gebeld ..

Nu test ik deze pagina op een iPad en vind ik het debuggen een beetje moeilijk.

Kan ik op de een of andere manier achterhalen (afdrukken op console) vanwaar mijn functie wordt gebeld?


10
2017-11-21 11:43


oorsprong


antwoorden:


Soortgelijk?

function testOne() {
    console.log("Test 1");
    logTest();
}
function testTwo() {
    console.log("Test 2");
    logTest();
}
function logTest() {
    console.log("Being called from " + arguments.callee.caller.toString());
}

testOne();
testTwo();

Als je gebruikt 'use strict'; in je JavaScript-bestand moet je reageren / verwijderen, anders krijg je zoiets als dit:

Uncaught TypeError: de eigenschappen 'caller', 'callee' en 'arguments' zijn mogelijk niet toegankelijk in strikte modusfuncties of de argumentenobjecten voor oproepen naar hen


14
2017-11-21 11:47



Een eenvoudige manier die ik graag gebruik is arguments.callee.caller.name.

Stel dat je wilde weten wat een functie genaamd myFunction heette:

function myFunction() {
    console.log(arguments.callee.caller.name);
    /* Other stuff... */
}

De browser-ondersteuning hiervoor is echter niet zo goed, dus in plaats daarvan kunt u arguments.callee.caller.toString () gebruiken. Merk op dat dit u de inhoud teruggeeft van de functie die myFunction heeft genoemd, dus u moet zelf de functienaam eruit graven.

Of u zou een mooie stack-trace-functie zoals deze kunnen gebruiken:

function getStack(){
    fnRE  = /function\s*([\w\-$]+)?\s*\(/i;
    var caller = arguments.callee.caller;
    var stack = "Stack = ";
    var fn;
    while (caller){
        fn = fnRE.test(caller.toString()) ? RegExp.$1 || "{?}" : "{?}";
        stack += "-->"+fn;
        caller = caller.arguments.callee.caller;
    };
    return stack;
}

Stapel Trace via http://www.amirharel.com/2010/01/25/using-caller-and-callee-for-stack-trace/


9
2017-11-21 12:01



Wilt u meer informatie over de beller Functie:

function nishant(){  // Caller function 
   kumar();
}nishant();

function kumar(){ // Callee
 console.log("This functiona is being called by " + arguments.callee.caller.toString());
}  

In plaats van arguments.callee.caller.toString() we kunnen ook gebruiken functionName.caller

Voorbeeld: 

function nishant(){  // Caller function 
   kumar();
}nishant();

function kumar(){ // Callee
 console.log("This functiona is being called by " + kumar.caller);
}  

Uitgang: zal hetzelfde zijn in beide bovengenoemde gevallen

This functiona is being called by function nishant()
{
kumar();
}

0
2018-01-03 11:15