I have a function that breaks somewhere in Line 1433 of ExtJS.
var createDelayed = function(h, o, scope){
console.log(arguments); //logs undefined all round.
There is arguments.callee.caller
, which refers to the function that called the function in which you access that property. arguments.callee
is the function itself.
There is no way to get the scope of the original function without passing it. In the following example, you cannot determine the this
value inside foo
(apart from knowing there is nothing special happening with this
here):
function foo() {
bar();
}
function bar() {
console.log(arguments.callee); // bar function
console.log(arguments.callee.caller); // foo function
}
foo();
Documentation
To get the line number things becomes trickier, but you can throw an error and look at the stack trace: http://jsfiddle.net/pimvdb/6C47r/.
function foo() {
bar();
}
function bar() {
try { throw new Error; }
catch(e) {
console.log(e.stack);
}
}
foo();
For the fiddle, it logs something similar to the following in Chrome, where the end of the line says the line number and character position:
Error
at bar (http://fiddle.jshell.net/pimvdb/6C47r/show/:23:17)
at foo (http://fiddle.jshell.net/pimvdb/6C47r/show/:19:5)
at http://fiddle.jshell.net/pimvdb/6C47r/show/:29:1