2011-11-21 22 views
8

बुला मैं जे एस में एक समारोह जो कई स्थानों से बुलाया जा रहा है है ..जावास्क्रिप्ट समारोह

अब मैं एक iPad पर इस पेज का परीक्षण कर रहा हूँ और इसलिए थोड़ा मुश्किल डिबगिंग खोजें।

क्या मुझे कुछ तरीकों से पता चल सकता है (कंसोल पर प्रिंट) जहां से मेरा फ़ंक्शन कहलाता है?

+2

यह मदद मिलेगी: http://stackoverflow.com/questions/280389/कैसे-करें-आप-खोज-आउट-द-कॉलर-फ़ंक्शन-इन-जावास्क्रिप्ट – Sid

+0

एक और लिंक http://stackoverflow.com/questions/147891/javascript-exception-stack-trace –

उत्तर

13

इस तरह?

Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them

+3

मुझे एक त्रुटि मिल रही है या .... अभिव्यक्ति का परिणाम arguments.callee.caller एक ऑब्जेक्ट नहीं है – testndtv

+0

मैं इसे आईपैड सफारी पर देख रहा हूं .. अगर इससे कोई फर्क पड़ता है ... – testndtv

+0

@ जेम्स, +1, आपके फ़ंक्शन ने अपना समय बचाया मौजूदा ढांचे को समझें और मेरा काम पूरा करें। बहुत धन्यवाद!!! –

9

मैं का उपयोग करना चाहते एक आसान तरीका arguments.callee.caller.name है:

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(); 

आप अपने JavaScript फ़ाइल में 'use strict'; का उपयोग करते हैं, तो आप टिप्पणी करने के लिए/इसे हटाने, क्योंकि अन्यथा आप कुछ इस तरह मिल जाएगा की जरूरत है ।

आप को पता है कि एक समारोह में कहा जाता myfunction बुला रहा था चाहता था कहते हैं:

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

इस के लिए ब्राउज़र समर्थन नहीं है कि महान है, हालांकि, तो आप arguments.callee.caller.toString इस्तेमाल कर सकते हैं है() बजाय। ध्यान दें कि इससे आपको फ़ंक्शन की सामग्री वापस मिल जाएगी जिसे मेरा फ़ंक्शन कहा जाता है, इसलिए आपको उस फ़ंक्शन नाम को स्वयं से खोदने की आवश्यकता होगी।

या, आप इस तरह एक अच्छा समारोह स्टैक ट्रेस इस्तेमाल कर सकते हैं: फोन करने वाले समारोह के बारे में विस्तार से करने के लिए

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; 
} 

स्टैक ट्रेस के माध्यम से http://www.amirharel.com/2010/01/25/using-caller-and-callee-for-stack-trace/

0

हैं:

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

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

स्थान पर arguments.callee.caller.toString() का हम functionName.caller

का भी उपयोग कर सकते हैं

उदाहरण:

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

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

आउटपुट: उपरोक्त मामले के दोनों में समान होगी

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

* functionName.caller * एक अच्छा है, लेकिन [गैर मानक] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller) (एमडीएन के अनुसार) – mTorres

संबंधित मुद्दे